您好,我在这里有一些简化的代码,显示我遇到的问题.基本上我似乎无法添加到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();
}
}
Run Code Online (Sandbox Code Playgroud)
持有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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
元素保存在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;
}
}
Run Code Online (Sandbox Code Playgroud)
所需的输出是2Bob 3Cat 4Dog
但我得到的只是
4Dog 4Dog 4Dog
我有一个更大规模的项目有这个问题吗?
先感谢您
摆脱staticNum变量的修饰符,因为它们正在制作它,以便所有Num实例有效地共享相同的单个变量(实际上并不是它们实际上是类的变量,但行为是相同的).让他们实例(非静态)变量来代替.
换句话说,改变这个:
public class Num {
private static String str;
private static int i;
Run Code Online (Sandbox Code Playgroud)
对此:
public class Num {
private String str;
private int i;
Run Code Online (Sandbox Code Playgroud)
获得的经验教训:static谨慎使用修饰语,只有在有意义的情况下使用修饰符.这里没有意义.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |