为什么Java中数组的每个元素都在不断变化?
我想创建一个对象数组。将有许多用户对象,我希望将这些用户对象保留在一个数组中。我有一个叫做数据的类。我试了很多次,但是没有找到解决办法。当用户输入一个新名称时,所有对象的名称都会随着给定的名称而改变,最后当我打印所有名称时,它会多次打印最后输入的名称。这是我的代码,它将非常有助于您理解: testClass.java为什么Java中数组的每个元素都在不断变化?,java,arrays,object,arraylist,Java,Arrays,Object,Arraylist,我想创建一个对象数组。将有许多用户对象,我希望将这些用户对象保留在一个数组中。我有一个叫做数据的类。我试了很多次,但是没有找到解决办法。当用户输入一个新名称时,所有对象的名称都会随着给定的名称而改变,最后当我打印所有名称时,它会多次打印最后输入的名称。这是我的代码,它将非常有助于您理解: testClass.java public class testClass { public static void main(String[] args) { mainScreen(
public class testClass {
public static void main(String[] args) {
mainScreen();
}
public static void mainScreen(){
Scanner scan = new Scanner(System.in);
System.out.println("1) Add a new user:");
int choice = scan.nextInt();
switch(choice){
case 1:
System.out.println("Enter name:");
String name = scan.next();
Data.users[Data.count] = new Data(name);
mainScreen();
break;
case 2:
for(int i =0; i<=Data.count; i++){
System.out.println(Data.users[i].name);
}
break;
}
}
}
public class Data {
public static Data[] users = new Data[600];
public static String name;
public static int count = 0;
public Data(String name) {
users[count].name = name;
count++;
}
}
我希望每个对象都有唯一的名称、id、电话号码等。。有人给我提建议吗?因为
name
是数据
类的静态字段,比如count
和用户
。
从
name
字段中删除静态修饰符。首先,您需要更正对象结构
您已经定义了一个类数据,它包含类本身的静态数据数组
class Data {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
一种解决方案是从数据中的名称字段中删除静态修饰符:
public static Data[] users = new Data[600];
public static int count = 0;
public String name;
public Data(String name) {
this.name = name;
Data.count++;
}
还要修改for循环,因为将获得NullPointerException,请从条件中删除equals:
for(int i =0; i<Data.count; i++){
for(int i=0;他使用数据的方式依赖于它是静态的。他必须从name
字段中删除静态的。我会更正答案以更清楚。@Nikolay:啊,我明白你的意思。是的,这确实是最直接的原因,但是数据
需要完全重构。:-)使用数据的方式极其脆弱,因为它依赖于使用它的类来理解其内部结构。这不是一个好主意,它会在非琐碎的情况下崩溃<代码>数据
不应既是用户信息的容器,也是这些容器的数组。这两件事应该是分开的,没有必要重新设计第二件事(事实上,你已经标记了你的问题arraylist
,在这里使用一个也不是一个坏主意)。@Crowder我想更新我的答案,这在评论中会很困难。是的,在编辑时,这是一个答案。最好不要发布不是答案的东西,然后编辑它们成为答案。让第一个版本成为一个完整的答案。@Crowder我尽力解释他,即使你也提供了一些代码片段,对他来说也很容易:)