我正在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
,并将其存储在索引0上的carArray
中。然后将carArray
增加为两个Car
- 对象大,并且创建的下一个对象存储在索引2处等等......或者我认为代码有效...
但是当我按下read
- 按钮时,只显示我创建的最后一个对象,这必须意味着它只是carArray
中的一个对象。在carArray
打印出lblSize
的大小时,它始终为1.我不明白为什么会发生这种情况,我们将非常感谢您的帮助!
答案 0 :(得分:2)
有问题是
int b = 1;
Car[] carArray = new Car[b];
当您在b
中提供new Car[b]
时,您要说java创建一个大小为b
的数组,即1.这就是为什么数组大小始终为1的原因。 / p>
即使您正在执行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。
答案 1 :(得分:1)
这是因为您在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++;
}
包括以下评论交换:
也要注意阵列初始化。您创建的carArray
大小为1(由于b = 1;
),因此如果您尝试添加的元素多于空格,则可能会遇到ArrayIndexOutOfBounds
异常。
此外,在添加每个新项目后,您似乎试图让carArray
更大。如果你想要一个可以改变大小的数组,我建议你考虑使用ArrayList
。即使您更改b
的值,carArray
的长度也始终为1