我的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 ************************************ ********** 我想到了。谢谢!
答案 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
- 如果不是这样,你基本上就会失败无论是什么信息......)