【发布时间】:2015-06-01 05:21:27
【问题描述】:
我的程序有一个对象类Person。一个 Person 对象由一个字符串 name(这是一个人的名字)和一个 6 元素字符串数组 choices 组成。该数组保存用户输入的值,以对 6 种不同的运动进行排名,从最喜欢到最不喜欢。
例如,一个名为testPerson 的Person 对象可以由一个设置为"Bob" 的字符串和一个包含每个元素的数组组成,如下所示{3,1,4,2,5,6}。 (列出的第二项运动是 Bob 最喜欢的运动,最后列出的运动是他最不喜欢的运动)。
可以使用以下代码创建该示例对象:
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 中的对象中的数组)
在所有(未知数量的)用户都输入了他们的信息后,按下一个按钮,表示没有更多用户可以输入信息。此时我需要访问每个人对象的名称和选择数组 为此,我显然会使用 for each 循环。我是这样设置的:
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() 方法返回最近的选择数组,而不是每个对象各自的选择数组。有人可以帮忙吗?让我知道是否需要澄清任何事情。提前致谢!
【问题讨论】:
-
您没有展示如何创建所有 Person 对象(期望第一个对象)。我怀疑您对所有这些都使用相同的选择数组。
标签: java arrays oop object arraylist