[英]Why does my object get deleted from array?
我正在用Netbeans编写一个程序,今天我意识到它并没有按我希望的那样工作。 该程序的想法是接受用户输入的内容,使用数据创建一个对象,然后将该对象存储在数组中。 按下按钮时会发生这种情况。 当按下另一个按钮时,数组的内容显示在jTextArea上。 我现在意识到的问题是,添加到数组的对象在添加另一个对象时被删除,我不知道为什么。
这是我创建对象的class
:
public class Car {
public String brand;
public String year;
public Car (String brand, String year) {
this.brand = brand;
this.year = year;
}
}
这是代码:
int b = 1;
Car[] carArray = new Car[b];
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
int a = 0;
carArray[a] = new Car (txtfBrand.getText(), txtfYear.getText());
a++;
b++;
}
private void btnReadActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
for (int i = 0; i < carArray.length; i++) {
txtaRead.append("" + carArray[i].Brand + "\n" + carArray[i].Year + "\n\n");
lblSize.setText("" + carArray.length);
}
}
上面的代码所做的是创建一个数组carArray
,这是一个Car
大的数组。 然后,当用户按压按钮btn
一个Car
与从值创建txtfBrand
和txtfYear
并存储在carArray
上索引0的阵列carArray
然后增加至是两个Car
-objects大,并且所创建的下一个对象是存储在索引2上,依此类推...或者我认为代码可以正常工作...
但是,当我按下read
按钮时,仅显示我创建的最后一个对象,这必须意味着它只是carArray
一个对象。 当打印出的大小carArray
上lblSize
,它始终是1。我不明白,为什么出现这种情况,任何帮助,将不胜感激!
有问题
int b = 1;
Car[] carArray = new Car[b];
当您在new Car[b]
给b
时,您说的是java创建大小为b
的数组,即1。这就是为什么数组大小的大小始终为1的原因。
即使您正在使用b++
,它也不会为数组增加额外的空间,因为您的数组已经创建。 因此,大小始终为1
。
同样,每次您将0th
索引处的值替换为( which was not intentional (I guess) but which is correct for an array of size 1
):
int a = 0;
carArray[a] = new Car (txtfBrand.getText(), txtfYear.getText());
当您不知道要插入多少个元素时,应该使用ArrayList或LinkedList 。
这是因为您要在add方法中将a
设置为零。 因此,该对象将放置在第一个索引处,从而擦除之前存在的任何项。 将变量初始化移到方法之外应该可以解决此问题,从而确保精确的增量。
int a = 0;
int b = 1;
Car[] carArray = new Car[b];
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
carArray[a] = new Car (txtfBrand.getText(), txtfYear.getText());
a++;
b++;
}
包括以下评论交流:
还要注意数组的初始化。 您正在创建大小为1的carArray
(由于b = 1;
),因此,如果您尝试添加的元素多于空间,则可能会遇到ArrayIndexOutOfBounds
异常。
此外,似乎您在添加每个新项目后都试图将carArray
增大。 如果您想要一个可以更改大小的数组,建议您使用ArrayList
。 即使更改b
的值, carArray
的长度也始终为1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.