首页 文章

访问由字符串和数组组成的Object中的数组

提问于
浏览
0

我的程序有一个Object Class Person . Person对象由String name (人名)和6元素字符串数组 choices 组成 . 该阵列保存用户输入的值,以将6个不同的运动从最优选到最少优先排序 .

例如,名为 testPerson 的Person对象可以包含一个设置为 "Bob" 的字符串和一个包含每个元素的数组,如下所示 {3,1,4,2,5,6} . (列出的第二项运动是鲍勃最喜欢的运动,列出的最后一项运动是他最不喜欢的运动) .

可以使用以下代码创建该示例对象:

String[] tempArray = new String[]{"3","1","4","2","5","6"};
Person newPerson = Person("Bob",tempArray);

这是Person类:

public class Person{
    private String[] choices = new String[6];
    private String name;
    //constructor
    public Person(String myName, String[] myInput){
        choices = myInput;
        name = myName;
    }
    //returns the choices array
    public String[] getChoices(){
        return(choices);
    }
    //returns the name
    public String getName(){
        return(name);
    }
}

每次新用户输入他们的名字和选择时,我都会创建一个新对象 . 由于我不知道新用户输入其详细信息的次数,因此我将每个新对象存储在名为“people”的ArrayList中 . (是的,我知道...... ArrayList中对象中的数组)

在所有(未知数量)用户输入其信息之后,按下按钮指示没有更多用户输入信息 . 此时我需要同时访问每个人对象的名称和选择数组 . 为此,我显然会为每个循环使用a . 我就是这样设置的:

String[] myChoices = new String[6];
String myName;
for(Person getPerson: people){
    myChoices = getPerson.getChoices();
    myName = getPerson.getName();
    //print name and choices
    System.out.println(myName);
    for(int i = 0; i < 6; i ++){
        System.out.println(myChoices[i]);
    }
}

“for each”循环应该打印6元素数组的名称和每个元素,并且它将为添加到人员ArrayList的每个对象执行此操作 . 换句话说,如果10个人输入他们的名字和他们的选择,它将按照他们输入的顺序打印每个人的姓名及其选择 .

但是,当我运行代码时,它会显示每个不同的名称,但在每个名称下,它会显示仅属于最后一个人输入其选择的选项 . 例如,如果Bob输入3,2,1,6,5,4;汤姆进入1,3,5,2,4,6;并且Bill输入2,1,4,3,6,5,将显示以下内容:

鲍勃2 1 4 3 6 5

汤姆2 1 4 3 6 5

比尔2 1 4 3 6 5

显然这是不对的 . 但我不明白为什么它正确显示每个名字,但它只显示每个人最近输入的选项 . 就好像Person类中的getName()方法返回每个对象的相应名称,但getChoices()方法返回最新的选择数组,而不是每个对象的相应选择数组 . 有人可以帮忙吗?如果我需要澄清任何事情,请告诉我 . 提前致谢!

2 回答

  • 1

    在构造函数中使用下面的代码 .

    //constructor
        public Person(String myName, String[] myInput){
            String copy = new String[6];
            System.arraycopy(myInput, 0, copy, 0, myInput.length);
            choices = copy;
            name = myName;
        }
    

    这一切都是由于您的对象引用而发生的 . 基本上,您使用相同的数组 object 初始化所有对象,这意味着如果 that original 对象发生更改,则所有 Person 对象中的数组对象都会更改 . 在上面的代码中,您正在创建该数组的新副本,然后将该 new 数组存储在Person对象中 .

    希望这可以帮助 .

  • 1

    很可能这是一个赋值问题,你为所有人使用相同的数组,因此数组反映了输入的最后一个值 . 为每个条目创建一个新数组,或者在构造期间将数组复制到对象中 .

相关问题