Java 跳出For循环总结

悠悠 2023-10-10 16:01 123阅读 0赞

Java 8 之前终止单层For循环

功能代码:

  1. // break 终止循环
  2. for (int i=0; i< 10; i++){
  3. if(i == 5) {
  4. break;
  5. }
  6. System.out.println("当前 i值为:" + i);
  7. }
  8. System.out.println("--------------------------");
  9. // continue 跳出当前循环,执行下一个循环
  10. for (int j=0; j< 10; j++){
  11. if(j == 5) {
  12. continue;
  13. }
  14. System.out.println("当前 j值为:" + j);
  15. }
  16. System.out.println("--------------------------");

控制台输出:

  1. 当前 i值为:0
  2. 当前 i值为:1
  3. 当前 i值为:2
  4. 当前 i值为:3
  5. 当前 i值为:4
  6. --------------------------
  7. 当前 j值为:0
  8. 当前 j值为:1
  9. 当前 j值为:2
  10. 当前 j值为:3
  11. 当前 j值为:4
  12. 当前 j值为:6
  13. 当前 j值为:7
  14. 当前 j值为:8
  15. 当前 j值为:9
  16. --------------------------

Java 关键字break 和continue 总结:

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

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

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

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

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

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

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

功能代码:

  1. public static void main(String[] args) {
  2. // break 终止循环
  3. for (int i=0; i< 10; i++){
  4. if(i == 5) {
  5. break;
  6. }
  7. System.out.println("当前 i值为:" + i);
  8. }
  9. System.out.println("--------------------------");
  10. // continue 跳出当前循环,执行下一个循环
  11. for (int j=0; j< 10; j++){
  12. if(j == 5) {
  13. continue;
  14. }
  15. System.out.println("当前 j值为:" + j);
  16. }
  17. System.out.println("--------------------------");
  18. // return 终止程序执行,实现终止当前for 循环
  19. for (int j=0; j< 10; j++){
  20. if(j == 5) {
  21. return;
  22. }
  23. System.out.println("当前 j值为:" + j);
  24. }
  25. System.out.println("--------------------------");
  26. // 基于IntStream.range() 生成连续集合
  27. List<Integer> colls = IntStream.range(1, 10).boxed().collect(Collectors.toList());
  28. // Java8 Stream 终止循环
  29. colls.stream().forEach(item ->{
  30. // 判断return关键字,在Stream中不生效
  31. if(item == 5){
  32. return;
  33. }
  34. // 判断continue/break关键字,在Stream中不允许使用
  35. // if(item == 5){
  36. // continue;
  37. // }
  38. // if(item == 5){
  39. // break;
  40. // }
  41. System.out.println("Stream 当前item 值为:" + item);
  42. });
  43. System.out.println("--------------------------");
  44. // Java8 Stream 终止循环,通过throws RuntimeException
  45. colls.stream().forEach(item ->{
  46. if (item == 5) {
  47. throw new RuntimeException("通过抛出异常,终止for循环");
  48. }
  49. System.out.println("Stream 当前item 值为:" + item);
  50. });
  51. }

控制台输出:

  1. 当前 i值为:0
  2. 当前 i值为:1
  3. 当前 i值为:2
  4. 当前 i值为:3
  5. 当前 i值为:4
  6. --------------------------
  7. 当前 j值为:0
  8. 当前 j值为:1
  9. 当前 j值为:2
  10. 当前 j值为:3
  11. 当前 j值为:4
  12. 当前 j值为:6
  13. 当前 j值为:7
  14. 当前 j值为:8
  15. 当前 j值为:9
  16. --------------------------
  17. 当前 j值为:0
  18. 当前 j值为:1
  19. 当前 j值为:2
  20. 当前 j值为:3
  21. 当前 j值为:4

结论:通过return 终止程序执行,实现终止for 循环可行

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

功能代码:

  1. public static void main(String[] args) {
  2. // break 终止循环
  3. for (int i=0; i< 10; i++){
  4. if(i == 5) {
  5. break;
  6. }
  7. System.out.println("当前 i值为:" + i);
  8. }
  9. System.out.println("--------------------------");
  10. // continue 跳出当前循环,执行下一个循环
  11. for (int j=0; j< 10; j++){
  12. if(j == 5) {
  13. continue;
  14. }
  15. System.out.println("当前 j值为:" + j);
  16. }
  17. System.out.println("--------------------------");
  18. // return 终止程序执行,实现终止当前for 循环
  19. // for (int j=0; j< 10; j++){
  20. // if(j == 5) {
  21. // return;
  22. // }
  23. // System.out.println("当前 j值为:" + j);
  24. // }
  25. // 通过抛出异常:throw RuntimeException,终止程序执行, 实现终止当前for循环
  26. for (int j=0; j< 10; j++){
  27. if(j == 5) {
  28. throw new RuntimeException("通过抛出异常,终止程序执行,实现终止当前for循环");
  29. }
  30. System.out.println("当前 j值为:" + j);
  31. }
  32. System.out.println("--------------------------");
  33. // 基于IntStream.range() 生成连续集合
  34. List<Integer> colls = IntStream.range(1, 10).boxed().collect(Collectors.toList());
  35. // Java8 Stream 终止循环
  36. colls.stream().forEach(item ->{
  37. // 判断return关键字,在Stream中不生效
  38. if(item == 5){
  39. return;
  40. }
  41. // 判断continue/break关键字,在Stream中不允许使用
  42. // if(item == 5){
  43. // continue;
  44. // }
  45. // if(item == 5){
  46. // break;
  47. // }
  48. System.out.println("Stream 当前item 值为:" + item);
  49. });
  50. System.out.println("--------------------------");
  51. // Java8 Stream 终止循环,通过throws RuntimeException
  52. colls.stream().forEach(item ->{
  53. if (item == 5) {
  54. throw new RuntimeException("通过抛出异常,终止for循环");
  55. }
  56. System.out.println("Stream 当前item 值为:" + item);
  57. });
  58. }

控制台输出:

  1. 当前 i值为:0
  2. 当前 i值为:1
  3. 当前 i值为:2
  4. 当前 i值为:3
  5. 当前 i值为:4
  6. --------------------------
  7. 当前 j值为:0
  8. 当前 j值为:1
  9. 当前 j值为:2
  10. 当前 j值为:3
  11. 当前 j值为:4
  12. 当前 j值为:6
  13. 当前 j值为:7
  14. 当前 j值为:8
  15. 当前 j值为:9
  16. --------------------------
  17. 当前 j值为:0
  18. 当前 j值为:1
  19. 当前 j值为:2
  20. 当前 j值为:3
  21. 当前 j值为:4
  22. Exception in thread "main" java.lang.RuntimeException: 通过抛出异常,终止程序执行,实现终止当前for循环
  23. at ForTest.main(ForTest.java:34)

结论:通过抛出异常throw RuntimeException() 终止程序执行,实现终止for 循环可行。

Java 8 Stream终止foreach循环

功能代码:

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

控制台输出:

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

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

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

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

Java8 Stream 终止foreach 循环拓展

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

功能代码:

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

控制台输出:

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

Java 跳出嵌套For循环

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

情况一:无返回值函数

  1. /**
  2. * 自定义函数 没有返回值,通过return 终止嵌套for 循环
  3. */
  4. public void noValue(){
  5. for (int i = 0; i <= 10; i++){
  6. for (int j=0; j<=10; j++){
  7. if (j == 5) {
  8. return;
  9. }
  10. System.out.println("当前j值为:" + j);
  11. }
  12. System.out.println("当前i值为:" + i);
  13. }
  14. }

情况二:有返回值函数

  1. /**
  2. * 自定义函数 有返回值,通过return 终止嵌套for 循环
  3. */
  4. public Integer value(){
  5. for (int i = 0; i <= 10; i++){
  6. for (int j=0; j<=10; j++){
  7. if (j == 5) {
  8. return j;
  9. }
  10. System.out.println("当前j值为:" + j);
  11. }
  12. System.out.println("当前i值为:" + i);
  13. }
  14. return 0;
  15. }

代码验证:

  1. public static void main(String[] args) {
  2. ForTest instance = new ForTest();
  3. instance.noValue();
  4. System.out.println("--------------");
  5. Integer num = instance.value();
  6. System.out.println("返回值为:" + num);
  7. }

控制台输出:

  1. 当前j值为:0
  2. 当前j值为:1
  3. 当前j值为:2
  4. 当前j值为:3
  5. 当前j值为:4
  6. --------------
  7. 当前j值为:0
  8. 当前j值为:1
  9. 当前j值为:2
  10. 当前j值为:3
  11. 当前j值为:4
  12. 返回值为:5

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

情况一:无返回值函数

  1. /**
  2. * 自定义函数 没有返回值,通过布尔标识变量 终止/暂停嵌套for 循环
  3. */
  4. public void noValue(){
  5. // 定义布尔值标识变量
  6. boolean target = true;
  7. for (int i = 0; i <= 10 && target; i++){
  8. for (int j=0; j<=10 && target; j++){
  9. if (j == 5) {
  10. target = false;
  11. }
  12. System.out.println("当前j值为:" + j);
  13. }
  14. System.out.println("当前i值为:" + i);
  15. }
  16. }

情况二:有返回值函数

  1. /**
  2. * 自定义函数 有返回值,通过布尔标识变量 终止/暂停嵌套for 循环
  3. */
  4. public Integer value(){
  5. // 定义布尔值标识变量
  6. boolean target = true;
  7. for (int i = 0; i <= 10 && target; i++){
  8. for (int j=0; j<=10 && target; j++){
  9. if (j == 5) {
  10. target = false;
  11. return j;
  12. }
  13. System.out.println("当前j值为:" + j);
  14. }
  15. System.out.println("当前i值为:" + i);
  16. }
  17. return 0;
  18. }

代码验证:

  1. public static void main(String[] args) {
  2. ForTest instance = new ForTest();
  3. instance.noValue();
  4. System.out.println("--------------");
  5. Integer num = instance.value();
  6. System.out.println("返回值为:" + num);
  7. }

控制台输出:

  1. 当前j值为:0
  2. 当前j值为:1
  3. 当前j值为:2
  4. 当前j值为:3
  5. 当前j值为:4
  6. 当前j值为:5
  7. 当前i值为:0
  8. --------------
  9. 当前j值为:0
  10. 当前j值为:1
  11. 当前j值为:2
  12. 当前j值为:3
  13. 当前j值为:4
  14. 返回值为:5

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

情况一:无返回值函数

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

情况二:有返回值函数

  1. /**
  2. * 自定义函数 有返回值,通过抛出异常 终止/暂停嵌套for 循环
  3. */
  4. public Integer value(){
  5. int num = 0;
  6. for (int i = 0; i <= 10; i++){
  7. for (int j=0; j<=10; j++){
  8. num = j;
  9. if (j == 5) {
  10. throw new RuntimeException("通过抛出运行异常,终止/暂停嵌套for 循环");
  11. }
  12. System.out.println("当前j值为:" + j);
  13. }
  14. System.out.println("当前i值为:" + i);
  15. }
  16. return num;
  17. }

代码测试:

  1. public static void main(String[] args) {
  2. ForTest instance = new ForTest();
  3. instance.noValue();
  4. System.out.println("--------------");
  5. Integer num = instance.value();
  6. System.out.println("返回值为:" + num);
  7. }

控制台输出:

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

发表评论

表情:
评论列表 (有 0 条评论,123人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java ---- 双重 for 循环

    我几行代码的大概逻辑是: 我们有一个值 a , 如果 a 不存在第一个集合中,我们就直接进行下一步操作 但是 a 存在第一个集合中,我们就要判断 a 是否还存在于第

    相关 循环

    之前写代码都是用for 循环,可以很好的使用break  直接跳出循环,或者continue跳出当前循环。 后来用了array.forEach 后也没有碰到需要跳出循环的操作