Java 跳出For循环总结

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 跳出For循环总结相关的知识,希望对你有一定的参考价值。

Java 8 之前终止单层For循环

功能代码:

 // break 终止循环
        for (int i=0; i< 10; i++)
            if(i == 5) 
                break;
            
            System.out.println("当前 i值为:"  + i);
        
        System.out.println("--------------------------");
        // continue 跳出当前循环,执行下一个循环
        for (int j=0; j< 10; j++)
            if(j == 5) 
                continue;
            
            System.out.println("当前 j值为:"  + j);
        
        System.out.println("--------------------------");

控制台输出:

当前 i值为:0
当前 i值为:1
当前 i值为:2
当前 i值为:3
当前 i值为:4
--------------------------
当前 j值为:0
当前 j值为:1
当前 j值为:2
当前 j值为:3
当前 j值为:4
当前 j值为:6
当前 j值为:7
当前 j值为:8
当前 j值为:9
--------------------------

Java 关键字break 和continue 总结:

  • break语句可以跳出当前循环;

  • break语句通常配合if,在满足条件时提前结束整个循环;

  • break语句总是跳出最近的一层循环;

  • continue语句可以提前结束本次循环;

  • continue语句通常配合if,在满足条件时提前结束本次循环。

Java 8 之前终止单层For循环拓展

疑惑1:Java 通过return关键字终止程序执行,实现终止for 循环

功能代码:

 public static void main(String[] args) 
        // break 终止循环
        for (int i=0; i< 10; i++)
            if(i == 5) 
                break;
            
            System.out.println("当前 i值为:"  + i);
        
        System.out.println("--------------------------");
        // continue 跳出当前循环,执行下一个循环
        for (int j=0; j< 10; j++)
            if(j == 5) 
                continue;
            
            System.out.println("当前 j值为:"  + j);
        
        System.out.println("--------------------------");
        // return 终止程序执行,实现终止当前for 循环
        for (int j=0; j< 10; j++)
            if(j == 5) 
                return;
            
            System.out.println("当前 j值为:"  + j);
        
        System.out.println("--------------------------");

        // 基于IntStream.range() 生成连续集合
        List<Integer> colls =  IntStream.range(1, 10).boxed().collect(Collectors.toList());
        // Java8 Stream 终止循环
        colls.stream().forEach(item ->
            // 判断return关键字,在Stream中不生效
            if(item == 5)
                return;
            
            // 判断continue/break关键字,在Stream中不允许使用
//            if(item == 5)
//                continue;
//            
//            if(item == 5)
//                break;
//            
            System.out.println("Stream 当前item 值为:" + item);
        );

        System.out.println("--------------------------");

        // Java8 Stream 终止循环,通过throws RuntimeException
        colls.stream().forEach(item ->
            if (item == 5) 
                throw new RuntimeException("通过抛出异常,终止for循环");
            
            System.out.println("Stream 当前item 值为:" + item);
        );

    

控制台输出:

当前 i值为:0
当前 i值为:1
当前 i值为:2
当前 i值为:3
当前 i值为:4
--------------------------
当前 j值为:0
当前 j值为:1
当前 j值为:2
当前 j值为:3
当前 j值为:4
当前 j值为:6
当前 j值为:7
当前 j值为:8
当前 j值为:9
--------------------------
当前 j值为:0
当前 j值为:1
当前 j值为:2
当前 j值为:3
当前 j值为:4
结论:通过return 终止程序执行,实现终止for 循环可行

疑惑2:Java 通过抛出异常throw RunTimeException终止程序执行,实现终止for 循环。

功能代码:

public static void main(String[] args) 
        // break 终止循环
        for (int i=0; i< 10; i++)
            if(i == 5) 
                break;
            
            System.out.println("当前 i值为:"  + i);
        
        System.out.println("--------------------------");
        // continue 跳出当前循环,执行下一个循环
        for (int j=0; j< 10; j++)
            if(j == 5) 
                continue;
            
            System.out.println("当前 j值为:"  + j);
        
        System.out.println("--------------------------");
        // return 终止程序执行,实现终止当前for 循环
//        for (int j=0; j< 10; j++)
//            if(j == 5) 
//                return;
//            
//            System.out.println("当前 j值为:"  + j);
//        
        // 通过抛出异常:throw RuntimeException,终止程序执行, 实现终止当前for循环
        for (int j=0; j< 10; j++)
            if(j == 5) 
                throw new RuntimeException("通过抛出异常,终止程序执行,实现终止当前for循环");
            
            System.out.println("当前 j值为:"  + j);
        
        System.out.println("--------------------------");

        // 基于IntStream.range() 生成连续集合
        List<Integer> colls =  IntStream.range(1, 10).boxed().collect(Collectors.toList());
        // Java8 Stream 终止循环
        colls.stream().forEach(item ->
            // 判断return关键字,在Stream中不生效
            if(item == 5)
                return;
            
            // 判断continue/break关键字,在Stream中不允许使用
//            if(item == 5)
//                continue;
//            
//            if(item == 5)
//                break;
//            
            System.out.println("Stream 当前item 值为:" + item);
        );

        System.out.println("--------------------------");

        // Java8 Stream 终止循环,通过throws RuntimeException
        colls.stream().forEach(item ->
            if (item == 5) 
                throw new RuntimeException("通过抛出异常,终止for循环");
            
            System.out.println("Stream 当前item 值为:" + item);
        );

    

控制台输出:

当前 i值为:0
当前 i值为:1
当前 i值为:2
当前 i值为:3
当前 i值为:4
--------------------------
当前 j值为:0
当前 j值为:1
当前 j值为:2
当前 j值为:3
当前 j值为:4
当前 j值为:6
当前 j值为:7
当前 j值为:8
当前 j值为:9
--------------------------
当前 j值为:0
当前 j值为:1
当前 j值为:2
当前 j值为:3
当前 j值为:4
Exception in thread "main" java.lang.RuntimeException: 通过抛出异常,终止程序执行,实现终止当前for循环
    at ForTest.main(ForTest.java:34)
结论:通过抛出异常throw RuntimeException() 终止程序执行,实现终止for 循环可行。

Java 8 Stream终止foreach循环

功能代码:

        // 基于IntStream.range() 生成连续集合
        List<Integer> colls =  IntStream.range(1, 10).boxed().collect(Collectors.toList());
        // Java8 Stream 终止循环
        colls.stream().forEach(item ->
            // 判断return关键字,在Stream中不生效
            if(item == 5)
                return;
            
            // 判断continue/break关键字,在Stream中不允许使用
//            if(item == 5)
//                continue;
//            
//            if(item == 5)
//                break;
//            
            System.out.println("Stream 当前item 值为:" + item);
        );

控制台输出:

--------------------------
Stream 当前item 值为:1
Stream 当前item 值为:2
Stream 当前item 值为:3
Stream 当前item 值为:4
Stream 当前item 值为:6
Stream 当前item 值为:7
Stream 当前item 值为:8
Stream 当前item 值为:9
--------------------------

Java8 Stream 关键字break、continue和return 总结:

  • java8 Stream 不支持关键字break 和continue

  • java8 Stream 通过return 关键字无法实现暂停/终止foreach 执行。

Java8 Stream 终止foreach 循环拓展

解决思路:通过抛出异常throw RuntimeException 终止程序执行,实现终止foreach 执行

功能代码:

 // Java8 Stream 终止循环,通过throws RuntimeException
        colls.stream().forEach(item ->
            if (item == 5) 
                throw new RuntimeException("通过抛出异常,终止for循环");
            
            System.out.println("Stream 当前item 值为:" + item);
        );

控制台输出:

--------------------------
Stream 当前item 值为:1
Stream 当前item 值为:2
Stream 当前item 值为:3
Stream 当前item 值为:4
Exception in thread "main" java.lang.RuntimeException: 通过抛出异常,终止for循环
    at ForTest.lambda$main$1(ForTest.java:63)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
    at ForTest.main(ForTest.java:61)

Java 跳出嵌套For循环

方式一:通过return 关键字 跳出 嵌套for 循环。

情况一:无返回值函数

/**
     * 自定义函数 没有返回值,通过return 终止嵌套for 循环
     */
    public void noValue()
        for (int i = 0; i <= 10; i++)
            for (int j=0; j<=10; j++)
                if (j == 5) 
                    return;
                
                System.out.println("当前j值为:" + j);
            
            System.out.println("当前i值为:" + i);
        
    

情况二:有返回值函数

 /**
     * 自定义函数 有返回值,通过return 终止嵌套for 循环
     */
    public Integer value()
        for (int i = 0; i <= 10; i++)
            for (int j=0; j<=10; j++)
                if (j == 5) 
                    return j;
                
                System.out.println("当前j值为:" + j);
            
            System.out.println("当前i值为:" + i);
        
        return 0;
    

代码验证:

public static void main(String[] args) 
        ForTest instance = new ForTest();
        instance.noValue();
        System.out.println("--------------");
        Integer num = instance.value();
        System.out.println("返回值为:" + num);
    

控制台输出:

当前j值为:0
当前j值为:1
当前j值为:2
当前j值为:3
当前j值为:4
--------------
当前j值为:0
当前j值为:1
当前j值为:2
当前j值为:3
当前j值为:4
返回值为:5

方式二:通过定义一个布尔值标识变量,实现终止/暂停嵌套for循环。

情况一:无返回值函数

 /**
     * 自定义函数 没有返回值,通过布尔标识变量 终止/暂停嵌套for 循环
     */
    public void noValue()
        // 定义布尔值标识变量
        boolean target = true;
        for (int i = 0; i <= 10 && target; i++)
            for (int j=0; j<=10 && target; j++)
                if (j == 5) 
                    target = false;
                
                System.out.println("当前j值为:" + j);
            
            System.out.println("当前i值为:" + i);
        
    

情况二:有返回值函数

 /**
     * 自定义函数 有返回值,通过布尔标识变量 终止/暂停嵌套for 循环
     */
    public Integer value()
        // 定义布尔值标识变量
        boolean target = true;
        for (int i = 0; i <= 10 && target; i++)
            for (int j=0; j<=10 && target; j++)
                if (j == 5) 
                    target = false;
                    return j;
                
                System.out.println("当前j值为:" + j);
            
            System.out.println("当前i值为:" + i);
        
        return 0;
    

代码验证:

 public static void main(String[] args) 
        ForTest instance = new ForTest();
        instance.noValue();
        System.out.println("--------------");
        Integer num = instance.value();
        System.out.println("返回值为:" + num);
    

控制台输出:

当前j值为:0
当前j值为:1
当前j值为:2
当前j值为:3
当前j值为:4
当前j值为:5
当前i值为:0
--------------
当前j值为:0
当前j值为:1
当前j值为:2
当前j值为:3
当前j值为:4
返回值为:5

方式三:通过抛出异常,实现终止/暂停嵌套For 循环

情况一:无返回值函数

  /**
     * 自定义函数 没有返回值,通过抛出异常 终止/暂停嵌套for 循环
     */
    public void noValue()
        for (int i = 0; i <= 10; i++)
            for (int j=0; j<=10; j++)
                if (j == 5) 
                   throw new RuntimeException("通过抛出运行异常,终止/暂停嵌套for 循环");
                
                System.out.println("当前j值为:" + j);
            
            System.out.println("当前i值为:" + i);
        
    

情况二:有返回值函数

 /**
     * 自定义函数 有返回值,通过抛出异常 终止/暂停嵌套for 循环
     */
    public Integer value()
        int num = 0;
        for (int i = 0; i <= 10; i++)
            for (int j=0; j<=10; j++)
                num = j;
                if (j == 5) 
                    throw new RuntimeException("通过抛出运行异常,终止/暂停嵌套for 循环");
                
                System.out.println("当前j值为:" + j);
            
            System.out.println("当前i值为:" + i);
        
        return num;
    

代码测试:

 public static void main(String[] args) 
        ForTest instance = new ForTest();
        instance.noValue();
        System.out.println("--------------");
        Integer num = instance.value();
        System.out.println("返回值为:" + num);
    

控制台输出:

Exception in thread "main" java.lang.RuntimeException: 通过抛出运行异常,终止/暂停嵌套for 循环
    at ForTest.noValue(ForTest.java:84)
    at ForTest.main(ForTest.java:72)
当前j值为:0
当前j值为:1
当前j值为:2
当前j值为:3
当前j值为:4

Process finished with exit code 1

以上是关于Java 跳出For循环总结的主要内容,如果未能解决你的问题,请参考以下文章

温习js中的for,forEach,map, some, every用法总结,跳出循环方法

JS循环及跳出循环总结

JS循环及跳出循环总结

java里面的一个break是跳出一层for循环,还是可以跳出几层

java里面的一个break是跳出一层for循环,还是可以跳出几层

JAVA breakcontinue和return的区别