我的程序有一个对象类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()方法返回最新的选择数组,而不是每个对象的相应选择数组。有人可以帮忙吗?如果我需要澄清任何事情,请告诉我。在此先感谢!
答案 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)
很可能这是一个分配问题,您为所有人使用相同的数组,因此数组反映了输入的最后一个值。为每个条目创建一个新数组,或者在构造期间将数组复制到对象中。