2

我有一个 CS 课的介绍性作业。我有一个名为 Car 的类和一个单独的数据文件,用于以后的文件重定向。我要:

使用哨兵循环读取每个 Car 对象的品牌、年份和价格,实例化该对象,并将其存储在数组 carArr[] 中。例如,如果您创建一个分配给名为 car1 的变量的汽车对象,您可以这样做: carArr[i] = car1 其中“i”是一个 int 计数器。此外,计算数组的元素,因为它们存储在 int 变量中,如 "i" 或 numCars

到目前为止,这是我的代码:

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 类中,我需要为我的 year、make 和 price 实例变量提供一个访问器方法。我需要在哪里使用这些?它还指出我必须有一个“称为 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));
}

为了分配,您可能需要使用数组,但这很烦人......

我也可能将其更改price为 aBigDecimal而不是double- 您不应该将二进制浮点类型用于货币值。

(顺便说一句,您肯定要丢弃在循环的每次迭代中读取的第一个值吗?您所做的只是检查它是否是EndDatabase- 如果不是,您基本上会丢失它的信息。 .)

于 2012-11-17T19:30:36.950 回答