2011-12-07 20 views
2

読み込みには最大4行のテキストファイルがあります。各行には、タブで区切られた文字列と整数の混合物があります。オブジェクトを行ごとに配列に格納しながらファイルを1行ずつ読み込みます。

私のプログラムは、1行を読み込み、すべての情報を適切な場所に保存し、新しいオブジェクトを配列に格納することに成功しました。

問題:複数の行を読み取る方法と、読み取った行に応じて配列に新しいオブジェクトを格納する方法を理解できません。

public void addVehicle(Vehicle Honda[]) throws FileNotFoundException 
{ 
    Scanner reader = new Scanner(file); 

     if(canAddVehicle() == true) 
     { 
     for(int i = 0; i < vehicles.length; i++) 
     { 
      if(vehicles[i] == null) 
      { 
       Honda[i] = new Vehicle(); 
       Honda[i].readRecord(reader); 
       vehicles[i] = Honda[i]; 
       reader.close(); 
       break; 
      } 
     } 
      System.out.println("Vehicle Added!"); 
     } 
     else 
     { 
      System.out.println("You can not add more than 4 vehicles."); 
     } 
} 

とreadRecord()メソッド:

public void readRecord(Scanner reader) 
{ 
    while(reader.hasNextLine()) 
    { 
     setMake(reader.next()); 
     setModel(reader.next()); 
     setYear(reader.nextInt()); 
     setvin(reader.next()); 
     setValue(reader.nextDouble()); 
     setMilesDriven(reader.nextInt()); 
     setLastOilChange(reader.nextInt()); 
    } 
    reader.close(); 
} 
+1

「reader.close()」を2回呼び出す – ComputerSaysNo

+0

車両配列の長さを宣言して初期化していますか?また、Javaの規約をもう少し詳しく読んでみることをお勧めします。ほとんどの構文規則に正しく従っているわけではありません。たとえば、ホンダは大文字で入力しないでください。通常は、クラスのみが大文字になります。また、 'Vehicle [] honda'のように、配列の左側に括弧を移動することをお勧めします。 – Andrew

+0

'if(canAddVehicle()== true)'は 'if(canAddVehicle())'と同じです。また、 'スキャナリーダー=新しいスキャナ(ファイル);'を 'if'ブロック内で移動することもできます。 –

答えて

0

最後に問題が解決しました。

public boolean addVehicle(Vehicle[] Honda) throws FileNotFoundException 
{ 
    boolean found = false; 
    int position = 0; 
     if(canAddVehicle() == true) 
     { 
      for(int i = 0; i < vehicles.length && !found; i++) 
      { 
       if(vehicles[i] == null) 
       { 
        position = i; 
        found = true; 
       } 
      } 

       Scanner reader = new Scanner(file); 
       while(reader.hasNext()) 
       { 
        Honda[position] = new Vehicle(); 
        Honda[position].readRecord(reader); 
        vehicles[position] = Honda[position]; 
        position++; 

       } 
       reader.close(); 
       return true; 
     } 
     return false; 
} 
3

だけ成功した一台の車両を保存することができた場合はここで

は、配列内のオブジェクトを、ファイルを取り、そして保存する私の方法であり、あなたが読者を閉めるのが早すぎるからです。

addVehicleで

()は、

reader.close(); 

とreadRecordで(取り除く)、

reader.close(); 

を取り除く)(addVehicleの終わりに読者を閉じ。

+0

これは助けになりましたが、今すぐファイルの最後の行を読むだけです – MJ93

関連する問題