Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何使用循环实例化新对象,将它们存储在数组中,然后使用它们?_Java_Arrays_Search_Object_Loops - Fatal编程技术网

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

在Java中,如何使用循环实例化新对象,将它们存储在数组中,然后使用它们?,java,arrays,search,object,loops,Java,Arrays,Search,Object,Loops,我有一个CS课程的介绍性作业。我有一个名为Car的类和一个单独的数据文件,用于以后的文件重定向。我要: 使用sentinel循环读取每辆车的品牌、年份和价格 对象,实例化该对象,并将其存储在数组carArr[]中。 例如,如果创建指定给名为 car1,您可以这样做:carArr[i]=car1,其中“i”是一个int计数器。 另外,当数组中的元素存储在int中时,对它们进行计数 变量,如“i”或numCars 以下是我目前的代码: Scanner scan = new Scanner(Syste

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

使用sentinel循环读取每辆车的品牌、年份和价格 对象,实例化该对象,并将其存储在数组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。我最终将不得不打印出数据库,然后在新车对象中读取它们作为搜索键。然后,该键将按顺序在carArr数组中搜索。 由于数组中的每个元素都填充了同名的对象,搜索是否会变得混乱

此外,当我搜索数组并将存储的对象与搜索对象进行比较时,我只需要执行以下操作:

key.equals(carArr[i])
这会比较每个对象的实例变量吗

在我的Car类中,我需要为我的年份、品牌和价格实例变量提供一个访问器方法。我需要在哪里使用这些? 它还声明我必须有一个“称为setPrice的mutator方法”和“一个equals方法”。 你知道我穿这些衣服意味着什么吗? 抱歉,这篇文章太长了,还有很多问题。我只是想赶在工作量的前面,而我的老师没有回复电子邮件。谢谢

**********编辑********************************************** 我想出来了。谢谢

我的问题是如何在每次通过循环并读取不同名的新数据时创建一个新的Car对象

对象没有名称

照现在的样子,我会制作一堆名为car1的物体

不,您将创建很多对象,仅此而已。在每次迭代中,您将为名为
car1
的变量分配一个引用,但变量不是对象-即使变量的值不是对象,它也是引用

不过,完全去掉
car1
会更简单,只需将引用直接分配到数组中:

carArr[i] = new Car(make, year, price);
最好使用
列表
而不是数组,这样就不需要单独跟踪大小。我将代码编写为:

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));
}
Scanner scan=新的扫描仪(System.in);
List cars=new ArrayList();
而(!scan.next().equals(“EndDatabase”))
{
字符串make=scan.next();
int year=scan.nextInt();
double price=scan.nextDouble();
添加(新车(品牌、年份、价格));
}
为了分配任务,您可能需要使用数组,但这很烦人

我还可能将
价格
更改为
大十进制
,而不是
双精度
——货币值不应使用二进制浮点类型


(顺便说一句,你确实想放弃循环每次迭代中读取的第一个值吗?你所做的只是检查它是否是
EndDatabase
-如果不是这样,你基本上丢失了它是什么的信息…

我需要使用数组,而不是数组列表。我还需要使
price
成为一个double,因为我需要在我的Car类中有一个方法来格式化它。不过我已经讲过了。还有,你的意思是什么“扔掉
car1
同样,你是对的。我必须调整我的sentinel循环,以便在读取的第一个数据不是sentinel时不会被丢弃。我将在循环之前先读入它,然后在循环结束时再读入它loop@GabrielleLee:对不起,我编辑了这篇文章-我想写:
carArr[I]=新车(品牌、年份、价格)
-这意味着您根本不需要
car1
变量。仅仅因为你必须在
Car
中有一个格式化价格的方法,并不意味着它必须是
double
——你也可以格式化
BigDecimal
值。。。