[英]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.