2

CSクラスの入門課題があります。Car という名前のクラスと、後でファイルをリダイレクトするための別のデータ ファイルがあります。私は:

センチネル ループを使用して、各 Car オブジェクトのメーカー、製造年、および価格を読み取り、オブジェクトをインスタンス化し、配列 carArr[] に格納します。たとえば、car1 という名前の変数に割り当てられた car オブジェクトを作成する場合、次のように実行できます: carArr[i] = car1 ここで、「i」は int カウンターです。また、「i」やnumCarsなどのint変数に格納されている配列の要素を数えます

これまでの私のコードは次のとおりです。

Scanner scan = new Scanner(System.in);
final int SIZE_ARR = 30;
Car [] carArr = new Car[SIZE_ARR];
int i = 0;
int numcars = 0;
String make = "";
int year = 0;
double price = 0.0;
final String SENT = "EndDatabase";

while (!scan.next().equals(SENT))
{
   make = scan.next();
   year = scan.nextInt();
   price = scan.nextDouble();
   Car car1 = new Car(make, year, price);
   carArr[i] = car1;
   i++;
   numCars++;
}

ループを通過して同じ名前を持たない新しいデータを読み込むたびに、新しい Car オブジェクトを作成するにはどうすればよいですか? それらは異なる名前を持つ必要がありますか?そのまま、car1 という名前の一連のオブジェクトを作成します。最終的には、データベースを印刷して、新しい Car オブジェクトで検索キーとして読み取る必要があります。次に、キーは carArr 配列を順次検索します。配列内のすべての要素が同じ名前のオブジェクトで満たされているため、検索が混乱しますか?

また、配列を検索し、格納されているオブジェクトを検索オブジェクトと比較するときは、次のことを行う必要があります。

key.equals(carArr[i])

各オブジェクトのインスタンス変数を相互に比較しますか?

私の Car クラスでは、年、メーカー、および価格のインスタンス変数に対するアクセサー メソッドが必要です。これらをどこで使用する必要がありますか?また、「setPrice と呼ばれるミューテーター メソッド」と「equals メソッド」が必要であると述べています。それらが私にとって何を意味するのか分かりますか?これが長く、複数の質問で申し訳ありません。仕事量を先取りしようとしているのに、先生がメールに返事をくれません。ありがとう!

**********編集*************************************** ******* 私はそれを考え出した。ありがとう!

4

1 に答える 1

5

私の問題は、ループを通過して同じ名前を持たない新しいデータを読み込むたびに、新しい Car オブジェクトを作成する方法です。

オブジェクトには名前がありません。

そのまま、car1 という名前のオブジェクトをたくさん作成します。

いいえ、たくさんのオブジェクトを作成します。それだけです。各反復で、 という変数への参照を割り当てますcar1が、変数はオブジェクトではありません。変数の値でさえオブジェクトではなく、参照です

car1ただし、完全に削除して、参照を配列に直接割り当てる方が簡単です。

carArr[i] = new Car(make, year, price);

配列の代わりにa を使用するList<Car>と、サイズを個別に追跡する必要がなくなります。コードを次のように記述します。

Scanner scan = new Scanner(System.in);
List<Car> cars = new ArrayList<Car>();

while (!scan.next().equals("EndDatabase"))
{
   String make = scan.next();
   int year = scan.nextInt();
   double price = scan.nextDouble();
   cars.add(new Car(make, year, price));
}

割り当てのために、おそらく配列を使用する必要がありますが、それは面倒です...

また、 を代わりにpriceaに変更することも考えられます。通貨値にバイナリ浮動小数点型を使用しないでください。BigDecimaldouble

(ちなみに、ループの各反復で読み取られた最初の値を破棄しますか?あなたがしているのは、それがそうであるかどうかを確認することだけですEndDatabase-そうでない場合は、基本的にそれが何であったかの情報を失っています.. .)

于 2012-11-17T19:30:36.950 に答える