我想在学生的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
我知道哪里出错了?
答案 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;
}
}
答案 1 :(得分:0)
通过在if循环中编写if语句,你只设置mychoices []数组的特定元素,它与你的名字(Garrett M)匹配,所有数组元素将保持不变,这就是为什么你得到49个零和1个
答案 2 :(得分:0)
有时,命令式编程可能会导致许多for
循环混乱。 从很多年以来,我们在代码中使用for
的次数太多了。使用Java 8,可以用声明式代码编写代码。以声明式样式编写的代码更易于阅读和理解。
只需添加 @Eran 已经回答的问题,我将尝试使用Java 8 Stream API简化相同的解决方案。有一天,如果不是今天,这对你来说可能会派上用场。
手头的问题是获取特定学生的选择,并将这些选择添加到数组(或集合)中。
这可以按如下方式完成:
List<Integer> myChoicesList = students.stream()
.filter(student -> student.getName().equals("Garrett M"))
.map(student -> student.getChoices())
.findFirst()
.get();
在第一步中,将students
列表转换为Java 8 Stream
。
记住Stream是一个抽象:
students.stream()
接下来,过滤掉您所在的某个特定学生 感兴趣的是:
filter(student -> student.getName().equals("Garrett M"))
此时,Stream包含了一名学生
过滤。但我们对这名学生的choices
感兴趣
具有。因此,将此Student
流转换为流
choices
:
.map(student -> student.getChoices())
既然您有自己的选择,就可以执行所需的操作 对他们的操作。而已!!完成!!
findFirst().get();
这会给你一个List<Integer>
。稍后您可以将此集合转换为Integer
数组:
Integer[] myChoices = myChoicesList.toArray(new Integer[myChoicesList.size()]);
注意:我设计了此代码段,假设来自getChoices()
类的Student
方法返回包含List<Integer>
选项的Student