public class Test {
static class Week {
boolean isCheck;
String title;
String numLink;
public Week(String title, String numLink, boolean isCheck) {
this.isCheck = isCheck;
this.title = title;
this.numLink = numLink;
}
}
public static void main(String args[]) {
List<Week> weeks = new ArrayList<>();
for (int i = 1; i < 8; i++) {
weeks.add(new Week("周" + i, "" + i, true));
}
List<String> list = new ArrayList<>();
for (int i = 1; i < 4; i++) {
list.add(i + "");
}
for (int i = 0; i < weeks.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (weeks.get(i).numLink.equals(list.get(j))) {
weeks.get(i).isCheck = true;
break;
}else{
weeks.get(i).isCheck = false;
}
}
}
for (int i = 0; i < weeks.size(); i++) {
System.out.println("Test.main" + weeks.get(i).isCheck);
}
}
}
没错这是一段正确的代码
我需要比较两个集合中的数据某些值相同的改变其中一个集合中的数据为true 常规操作要改变谁的数据谁应该是外层循环这样break 跳出内层循环之后外层循环才会接着取下一个值
如果我们将改变的集合写在内层循环中你会发现只有最后一个数据会变 因为集合中的数据只有一项是相同的 双重for循环必然会循环多次 比如外层循环3次内层循环7次 此时i=0 j=0 第一次循环相同 注意内层循环开始了j++ i依然=0 j 变成了1 那就显然走了内层的else 值又不相等了对同一个weeks.get(i) 数据的多次变化 所以改变谁的值谁在外层循环并满足条件的时候跳出循环
下面是错误的代码
public class Test {
static class Week {
boolean isCheck;
String title;
String numLink;
public Week(String title, String numLink, boolean isCheck) {
this.isCheck = isCheck;
this.title = title;
this.numLink = numLink;
}
}
public static void main(String args[]) {
List<Week> weeks = new ArrayList<>();
for (int i = 1; i < 8; i++) {
weeks.add(new Week("周" + i, "" + i, true));
}
List<String> list = new ArrayList<>();
for (int i = 1; i < 8; i++) {
list.add(i + "");
}
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < weeks.size(); j++) {
if (list.get(i).equals(weeks.get(j).numLink)) {
weeks.get(j).isCheck = true;
}else{
weeks.get(j).isCheck = false;
}
}
}
for (int i = 0; i < weeks.size(); i++) {
System.out.println("Test.main" + weeks.get(i).isCheck);
}
}
}
Test.mainfalse
Test.mainfalse
Test.mainfalse
Test.mainfalse
Test.mainfalse
Test.mainfalse
Test.maintrue