簡體   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