2011-12-07 34 views
0

現在作成しているコードでは、テキストファイルの最初の行が格納され、新しいVehicleオブジェクトが作成され、nullの最初の位置に配置されます配列内のすべてのヌル値に同じ行を格納します。テキストファイルを1行ずつ読み込んでオブジェクトを配列に格納する

最初の行の内容を格納してから、新しいVehicleオブジェクトをnullの配列の最初の場所に格納します。それ以上の行がなくなるまで繰り返す。

私はforループの問題だと思います。

public void readRecord(Scanner reader) 
{ 

    setMake(reader.next()); 
    setModel(reader.next()); 
    setYear(reader.nextInt()); 
    setvin(reader.next()); 
    setValue(reader.nextDouble()); 
    setMilesDriven(reader.nextInt()); 
    setLastOilChange(reader.nextInt()); 



} 

データファイル:

Hyundai Sonata 2010 ABC236347NM2N2NW2 18455.34 8765 7567 
Chevy Blazer 1998 1234H32343LMN3423 29556.65 38559 38559 

// EDIT \ Constraits: - 注意私が代わりにArrayListの

public void addVehicle(Vehicle[] Honda) throws FileNotFoundException 
{ 

     if(canAddVehicle() == true) 
     { 
     for(int i = 0; i < vehicles.length; i++) 
     { 
      if(vehicles[i] == null) 
      { 
       Scanner reader = new Scanner(file); 

       Honda[i] = new Vehicle(); 
       Honda[i].readRecord(reader); 
       vehicles[i] = Honda[i]; 

       reader.close(); 
      } 
     } 
      System.out.println("Vehicle Added!"); 
     } 
     else 
     { 
      System.out.println("You can not add more than 4 vehicles."); 
     } 
} 

Vehicleクラスの配列を使用するために必要なのです私はできません新しいパブリックメソッドやコンストラクタを作成すると、追加のクラスレベルのデータを持てません

+2

このスレッドに固執すべきです - http://stackoverflow.com/questions/8410050/reading-a-file-line-by-line-while-storing-an-object-in-ar-array -for-each-line – adatapost

+0

申し訳ありませんが、私は今、これを終わらせようとしている9時間連続して稼働しており、これ以上考えることは本当に困難です。私はちょうどこれを行う必要があります – MJ93

+0

私たちが示唆できるようにあなたはデータファイルの内容を投稿する必要があります。 – adatapost

答えて

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; 
} 
2

readRecordの方法でループしていますが、これは1つのオブジェクトのみを格納するためのものですが、そうではありませんか?

whileループを削除することは可能ですが、それはファイル内のエントリ数を知っているaddVehicle発信者に依存しますが、

ファイルからすべてを読み取って、List<Vehicle>を入力して戻す方法が必要です。例:

public List<Vehicle> readVehicles(String file) 
{ 
    Scanner reader = new Scanner(file); 

    List<Vehicle> vehicles = new ArrayList<Vehicle>(); 
    try 
    { 
     while (reader.hasNextLine()) 
     { 
      vehicles.add(Vehicle.readFromScanner(reader)); 
     } 
    } 
    finally 
    { 
     reader.close(); 
    } 
    return vehicles; 
} 

// In vehicle 
public static Vehicle readFromScanner(Scanner scanner) 
{ 
    String make = reader.next(); 
    String model = reader.next(); 
    int year = reader.nextInt(); 
    String vin = reader.next(); 
    // Don't use double for currency values 
    BigDecimal value = reader.nextBigDecimal(); 
    int milesDriven = reader.nextInt(); 
    // Shouldn't this be some sort of date type? 
    int lastOilChange = reader.nextInt(); 

    // I'll assume you have a constructor like this 
    return new Vehicle(make, model, year, vin, value, milesDriven, 
         lastOilChange); 
} 
+0

ああ、なぜ私はそこにwhileループがあったのか分かりません。とても遅くてすみません、私はこれを9時間連続して終えようと努力してきました。私はListArrayについてまだ学んだことはありませんので、どうしてそれをどうすればいいのか分かりません。 – MJ93

+2

@ MJ93:私の編集を見てください。しかし、あなたが割り当てられている場合は、あなたの先生に話すことが最善であるかもしれません。まだ遭遇していないコンセプトを使って、はるかにうまく機能します。 –

+0

ArrayListsに関する情報をありがとう、私は最初に説明している必要があります:コードのいくつかはすでに私のために提供された、私が作成するメソッドはプライベート(ヘルパー)メソッドでなければなりません。だから私はVehicleクラスの中に新しいpublicメソッドを作成することはできません。それは必要条件です – MJ93

関連する問題