在Java中,如何使用循环实例化新对象,将它们存储在数组中,然后使用它们?

art*_*00n 2 java arrays search loops object

我有一个CS课程的入门作业.我有一个名为Car的类和一个单独的数据文件,用于以后的文件重定向.我是这样的:

使用sentinel循环读取每个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++;
}
Run Code Online (Sandbox Code Playgroud)

每次循环并读入不具有相同名称的新数据时,如何创建新的Car对象?他们需要有不同的名字吗?就像我一样,我将制作一堆名为car1的对象.我最终将打印出数据库,然后在新的Car对象中将它们作为搜索键读取.然后,密钥将依次搜索carArr数组.搜索是否会混淆,因为数组中的每个元素都填充了一个同名的对象?

此外,当我通过搜索数组并将我存储的对象与我的搜索对象进行比较时,我只需要这样做:

key.equals(carArr[i])
Run Code Online (Sandbox Code Playgroud)

是否会将每个对象的实例变量相互比较?

在我的Car类中,我需要为我的year,make和price实例变量设置一个访问器方法.我需要在哪里使用这些?它还声明我必须有一个名为setPrice的"mutator方法"和"一个equals方法".知道他们对我们的意义吗?很抱歉这个和多个问题的长度.我只是想保持领先于我的工作量而我的老师没有回复电子邮件.谢谢!

**********编辑**********************************************我想到了.谢谢!

Jon*_*eet 5

我的问题是如何在每次循环并读入不具有相同名称的新数据时创建新的Car对象?

对象不具有名称.

我只是在制作一堆名为car1的对象.

不,你会创造很多物品,就是这样.在每次迭代中,您将为被调用的变量分配引用car1,但变量不是对象 - 甚至变量的值也不是对象,它是引用.

car1完全摆脱它会更简单,只需将引用直接分配到数组中:

carArr[i] = new Car(make, year, price);
Run Code Online (Sandbox Code Playgroud)

使用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));
}
Run Code Online (Sandbox Code Playgroud)

为了分配你可能需要使用一个数组,但这只是烦人的...

我也可能更改price为a BigDecimal而不是double- 您不应该使用二进制浮点类型作为货币值.

(顺便说一下,你肯定想放弃循环的每次迭代中读取的第一个值吗?你正在做的就是检查它是否EndDatabase- 如果不是这样,你基本上就失去了它的信息...... .)