我想在学生的ArrayList中找到我的名字,然后将我选择的50个选择转移到一个名为myChoices的新数组中(稍后将与其他人进行比较以进行匹配)。 Student类包含一个名称和一个ArrayList选项。这是相关的循环:

int matches[] = new int[students.size()];
int myChoices[] = new int[students.get(0).getChoices().size()];

for(int i = 0; i < students.get(i).getChoices().size(); i++){
    if(students.get(i).getName().equals("Garrett M")){
        myChoices[i] = students.get(i).getChoices().get(i);
    }
}

for(int i = 0; i < myChoices.length; i++){
    System.out.println(myChoices[i]);
}


在最后一个循环中,我只是尝试打印我的选择,结果如下所示:

0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0


(这不是50,但是您可以理解要点-在输出中大约有49个零和1。)实际输出应以1开头,并且是0,1和-1的混合:

1 -1 1 1 1 1 0 1 1 0 0 0 1 1 0 1 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 1 -1 0 1 0 0 0 0 1 1 1 1 0 1

知道我哪里可能出问题了吗?

最佳答案

您正在为i列表和students列表使用相同的索引students.get(i).getChoices()。可能是错的。

您可能需要一个嵌套循环:

for(int i = 0; i < students.size(); i++) { // iterate over the students to find the one
                                           // having the required name
    if(students.get(i).getName().equals("Garrett M")){
        // iterate over the choices of the found student and collect them into the array
        for (int j = 0; j < students.get(i).getChoices().size; j++) {
            myChoices[j] = students.get(i).getChoices().get(j);
        }
        break;
    }
}

10-06 00:39