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

时间:2013-11-03 10:55:06

标签: java arrays object arraylist

我想创建一个对象数组。将有许多用户对象,我想将这些用户对象保留在一个数组中。我有一个名为Data的类。我经常尝试和搜索,但找不到解决方案。当用户输入新名称时,所有对象的名称都会更改为给定的名称,最后当我打印所有名称时,它会多次打印最后输入的名称。这是我的代码,你理解它会很有帮助:

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;
        }   
    }
}

Data.java

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,电话号码等。有人对我有建议吗?

3 个答案:

答案 0 :(得分:1)

因为nameData类的静态字段,例如countusers。 从name字段中删除静态修饰符。

答案 1 :(得分:0)

首先,您需要更正对象结构

您已经定义了一个类Data,其中包含Data Class本身的静态数组

  1. 我更喜欢将数据类设为:

    class Data {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
  2. 在testClass中创建一个Data类数组

  3. 为每个输入创建新的数据对象,并使用setName将名称分配给新创建的对象

  4. 在testClass中维护count变量。每次获得新输入并使用count变量将新创建的Object分配给数据数组时递增它

答案 2 :(得分:0)

一种解决方案是从Data:

中的名称字段中删除static修饰符
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++){