繁体   English   中英

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

[英]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与从值创建txtfBrandtxtfYear并存储在carArray上索引0的阵列carArray然后增加至是两个Car -objects大,并且所创建的下一个对象是存储在索引2上,依此类推...或者我认为代码可以正常工作...

但是,当我按下read按钮时,仅显示我创建的最后一个对象,这必须意味着它只是carArray一个对象。 当打印出的大小carArraylblSize ,它始终是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());

当您不知道要插入多少个元素时,应该使用ArrayListLinkedList

这是因为您要在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM