[英]Why doesn't this break statement work as intended?
我有一個帶有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
語句時,您正在正確讀取所有數字,因此您的程序可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.