簡體   English   中英

為什么這個break語句不能按預期工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM