java - 为什么这个break语句没有按预期工作?

标签 java break

我有一个带有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语句之间有什么不同,这样当你第一次在set内找到-cur时,你会将cancel更改为false然后break,每次在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/

相关文章:

java - 如何以正确的方式动态处理开始和结束线程和信息?

javascript - HTML5 canvas ctx.fillText 不会换行?

PHP - 突破框架

python - 我怎样才能回到循环的开头?

r - R 中使用 strsplit() 函数对单个单词执行break和next函数

java - 在此示例中,break 子句如何响应?

java - 如何从控制台输入字符串获取控制字符

java - 如何获取 GridBagLayout 的尺寸?

java - Android:应用程序升级而不是新版本

java - 在使用 Apache 'HttpClient' 的 PUT 操作期间更快地检测中断的连接