【问题标题】:Q: How to break a for loop inside a method?问:如何打破方法内的 for 循环?
【发布时间】:2017-05-14 12:24:20
【问题描述】:

所以我试图找出数组a是否是数组b的子集,我的代码如下:`

public class subset {
    public static boolean subset(int[]a, int[] b) {
        for(int i=0;i<a.length;i++){
            for(int j=0;i<a.length;j++){
                if(a[i]==b[j]){
                    return true;
                    break;
                }else{
                    return false;
                }
            }
        }
    }
    public static void main(String[]args){
        int[] a = {1,2,6};
        int[] b = {1,2,4,3,7,4,8,5};
        if (subset(a,b))
            System.out.println("Array 1 is  contained  in Array 2");
        else
            System.out.println("Array 1 is not contained in Array 2");
    }
}

我收到以下错误:无法访问的语句和缺少返回语句。 我想要做的是,当 if 条件为真时,它会停止内部 for 循环并继续外部 for 循环。 在此先感谢

【问题讨论】:

  • return 从方法中退出,这意味着在该方法中放置的任何代码(此处为 break)都不会执行,这就是您看到此错误的原因。如果 returntry 部分中,则只有 finally 部分例外。
  • 你的内循环错了;它一直计数到a.length,而您显然希望它一直计数到b.length,因为变量j 循环通过b,而不是a

标签: java loops break


【解决方案1】:

有两件事需要解决。您需要删除break,并在末尾添加return false

public static boolean subset(int[]a, int[] b) {
    for(int i=0;i<a.length;i++){
        for(int j=0;i<a.length;j++){
            if(a[i]==b[j]){
                return true;
                //break; remove this
            }else{
                return false;
            }
        }
    }
    return false; //add this
}

此外,您可以通过这样做来简化它,而不是 if..else

return a[i]==b[j];

【讨论】:

  • 这仍然行不通,好像 i=2 和 j=1 它将返回 false 而不检查数组的其余部分。
【解决方案2】:

第一个问题是这样的:

return true;
break;}

第二行永远不会被执行,因为第一行终止了方法的执行。在这里决定你想要哪一行:返回一个值或跳出内部循环(我也不认为,这个分支应该是空的,见下文)。

第二个问题是,当您传入一个空数组时,不会执行循环,并且该方法没有要返回的值。这里只是在方法的末尾添加一个“return true”(或false,这里相当随意)。

你或许可以这样简化循环体:

if(a[i]!=b[j]){
    return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2021-03-11
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多