访问由字符串和数组

时间:2015-06-01 05:21:28

标签: java arrays oop object arraylist

我的程序有一个对象类Person。 Person对象由字符串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 个答案:

答案 0 :(得分:1)

在构造函数中使用以下代码。

session.get('PHPREDIS_SESSION:' + key).
then(function(data) {
    // do something with data
}).
catch(function(err) {
    // handle error with err
});

由于您的对象引用,这一切都在发生。基本上,您使用相同的数组对象来初始化所有对象,这意味着如果原始对象发生更改,则所有 //constructor public Person(String myName, String[] myInput){ String copy = new String[6]; System.arraycopy(myInput, 0, copy, 0, myInput.length); choices = copy; name = myName; } 个对象中的数组对象变化。在上面的代码中,您正在创建该数组的新副本,然后将 new 数组存储在Person对象中。

希望这有帮助。

答案 1 :(得分:1)

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