为什么我的对象会从数组中删除?

时间:2015-07-29 19:52:14

标签: java arrays netbeans

我正在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时,将使用CartxtfBrand中的值创建txtfYear,并将其存储在索引0上的carArray中。然后将carArray增加为两个Car - 对象大,并且创建的下一个对象存储在索引2处等等......或者我认为代码有效...

但是当我按下read - 按钮时,只显示我创建的最后一个对象,这必须意味着它只是carArray中的一个对象。在carArray打印出lblSize的大小时,它始终为1.我不明白为什么会发生这种情况,我们将非常感谢您的帮助!

2 个答案:

答案 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());

如果您不知道要插入多少元素,则应使用ArrayListLinkedList

答案 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