我的程序有一个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 回答
在构造函数中使用下面的代码 .
这一切都是由于您的对象引用而发生的 . 基本上,您使用相同的数组 object 初始化所有对象,这意味着如果 that original 对象发生更改,则所有
Person
对象中的数组对象都会更改 . 在上面的代码中,您正在创建该数组的新副本,然后将该 new 数组存储在Person对象中 .希望这可以帮助 .
很可能这是一个赋值问题,你为所有人使用相同的数组,因此数组反映了输入的最后一个值 . 为每个条目创建一个新数组,或者在构造期间将数组复制到对象中 .