3

您好,我在这里有一些简化的代码,显示了我遇到的问题。基本上,我似乎无法添加到 ArrayList 的末尾,而是自己重写。请帮忙

主要的

public class Main {

public static void main(String[] args) {
    HolderOfList h = new HolderOfList();
    h.addToHolder(new Num(2, "Bob"));
    h.addToHolder(new Num(3, "Cat"));
    h.addToHolder(new Num(4, "Dog"));
    h.printAll();
}
}

持有 ArrayList 的类

import java.util.ArrayList;
import java.util.List;

public class HolderOfList {
List<Num> num;

public HolderOfList() {
    num = new ArrayList<Num>();
}

void addToHolder(Num n) {
    num.add(n);
}

void printAll() {
    for (int i = 0; i < num.size(); i++) {
        System.out.println(num.get(i).getI() + num.get(i).getStr());
    }
}
}

ArrayList 中保存的元素

public class Num {

private static String str;
private static int i;

public Num(int i, String str) {
    this.str = str;
    this.i = i;
}

String getStr() {
    return str;
}

int getI() {
    return i;
}

}

所需的输出是 2Bob 3Cat 4Dog

但我得到的只是

4狗 4狗 4狗

我有一个更大规模的项目,有这个问题有什么想法吗?

先感谢您

4

1 回答 1

5

去掉 Num 变量的static修饰符,以便所有 Num 实例有效地共享相同的单个变量(实际上并不是因为它们实际上是类的变量,但行为是相同的)。改为使它们成为实例(非静态)变量。

换句话说,改变这个:

public class Num {
  private static String str;
  private static int i;

对此:

public class Num {
  private String str;
  private int i;

经验教训:static谨慎使用修饰符,并且仅在有意义的情况下使用。这里没有意义。

于 2012-10-06T02:18:20.523 回答