为什么Java中数组的每个元素都在不断变化?

为什么Java中数组的每个元素都在不断变化?,java,arrays,object,arraylist,Java,Arrays,Object,Arraylist,我想创建一个对象数组。将有许多用户对象,我希望将这些用户对象保留在一个数组中。我有一个叫做数据的类。我试了很多次,但是没有找到解决办法。当用户输入一个新名称时,所有对象的名称都会随着给定的名称而改变,最后当我打印所有名称时,它会多次打印最后输入的名称。这是我的代码,它将非常有助于您理解: testClass.java public class testClass { public static void main(String[] args) { mainScreen(

我想创建一个对象数组。将有许多用户对象,我希望将这些用户对象保留在一个数组中。我有一个叫做数据的类。我试了很多次,但是没有找到解决办法。当用户输入一个新名称时,所有对象的名称都会随着给定的名称而改变,最后当我打印所有名称时,它会多次打印最后输入的名称。这是我的代码,它将非常有助于您理解:

testClass.java

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;
        }
    }
    
  • 在testClass中创建一个数据类数组

  • 为每个输入创建新的数据对象,并使用setName为新创建的对象指定名称

  • 在testClass中维护count变量。每次获得新输入时递增该值,并使用count变量将新创建的对象分配给数据数组


  • 一种解决方案是从数据中的名称字段中删除静态修饰符:

    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我尽力解释他,即使你也提供了一些代码片段,对他来说也很容易:)