我有一个带有break语句的简单代码段。我正在尝试解决此http://codeforces.com/contest/787/problem/B。我想出了以下解决方案:
public static void main(String[] args) {
FastReader in = new FastReader();
int n = in.nextInt(), m = in.nextInt();
HashSet<Integer> set = new HashSet<>();
for(int i=0;i<m;i++){
set.clear();
int k = in.nextInt();
boolean cancel = true;
for(int j=0;j<k;j++){
int cur = in.nextInt();
if(set.contains(-cur)){
cancel = false;
break;
}
else set.add(cur);
}
if(cancel && k!=0){
System.out.println("YES");
return;
}
}
System.out.println("NO");
}
它没有通过测试,但是在cancel = false之后,我删除了break语句。线。有用。我似乎无法解释拥有break语句的区别,因此,当您第一次发现-cur内部集合时,您将cancel更改为false,然后中断,并在每次在set中找到-cur内部时分配false来取消并等待直到循环结束而不中断。
最佳答案
脱离for(int j=0;j<k;j++)
时,您不会读取该输入行的所有k
数字(除非您已经在最后一个数字上了)。
例如,考虑以下输入:
2 2
3 -1 1 -2
1 2
读取-1和1后,您可以将
cancel
设置为false
并跳出内部循环。下次,通过外循环,它会将-2读入k
,并且您将其弄乱了。当您删除
break
语句时,您正在正确读取所有数字,因此您的程序可以正常工作。关于java - 为什么这个break语句不能按预期工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42986970/