我有一個名爲Bag2的類,它有一個名爲Item的內部類。 Bag2具有變量ArrayList aList和稱爲「add」的函數。它通過重複添加重複值來添加錯誤。ArrayList <Item>(其中Item是內部類)添加錯誤
這裏是我的代碼:
import java.util.ArrayList;
public class Bag2 {
public Bag2(){}; // Constructor
/**
* Inner class
*
*/
public class Item implements Comparable<Item> {
String name;
int quantity;
public Item(String name, int quantity) { // Constructor
this.name = name;
this.quantity = quantity;
}
@Override
public String toString() {
return name + " : " + quantity;
}
@Override
public int compareTo(Item o) {
return name.compareToIgnoreCase(o.name);
}
}
public ArrayList<Item> aList = new ArrayList<>();
public void add(String itemName){
Bag2 bag2 = new Bag2();
Bag2.Item item = bag2.new Item(itemName.toUpperCase(), 1);
if (aList.isEmpty()){
aList.add(item);
} else
{
for(int i = 0; i < aList.size();i++){
if (item.compareTo(aList.get(i))==0){
aList.get(i).quantity++;
}else {
aList.add(item); // Built inn add-function
break; // add one time only and the size increases
}
}
}
}
}
這裏是我的測試:
public class Bag2Test {
public static void main(String[] args) {
Bag2 bag = new Bag2();
Bag2.Item[] anArray =
{
bag.new Item("A", 1),
bag.new Item("B", 1),
bag.new Item("C", 1),
bag.new Item("D", 1),
bag.new Item("a", 1),
bag.new Item("F", 1),
bag.new Item("b", 1),
bag.new Item("e", 1),
bag.new Item("a", 1)
};
for (int i = 0; i<anArray.length; i++){
bag.add(anArray[i].name); //
}
System.out.println("\nA list contains : ");
for (int i = 0; i<bag.aList.size(); i++) {
System.out.println(bag.aList.get(i));
}
}
}
輸出:
列表包含: 答:3 B:1 Ç :1 D:1 A:1 F:1 B:1 E:1 答:1個
Item類應該是靜態的。它不使用任何外部對象的方法領域。這就是說,你應該問一個問題。 – 2014-09-27 15:24:08
你內心的課堂使用令人不安。如何使Item成爲靜態類?我強烈建議使用調試器並逐步執行「add」方法。你會很快知道發生了什麼。 – Holger 2014-09-27 15:30:30