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

时间:2012-11-17 19:27:44

标签: java arrays search object loops

我的CS课程有一个介绍性的作业。我有一个名为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的“mutator方法”和“一个equals方法”。 知道他们对我们的意义吗? 很抱歉这个和多个问题的长度。我只是想保持领先于我的工作量而我的老师没有回复电子邮件。谢谢!

********** EDIT ************************************ ********** 我想到了。谢谢!

1 个答案:

答案 0 :(得分:5)

  

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

对象没有名称。

  

按原样,我只是制作一堆名为car1的对象。

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

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

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

使用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更改为BigDecimal而不是double - 您不应将二进制浮点类型用于货币值。

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