【问题标题】:While loop not breaking out in Java虽然循环没有在 Java 中爆发
【发布时间】:2021-05-09 08:04:54
【问题描述】:

我已经用 Java 编写了这个 switch case 程序。但是,while 循环没有中断。代码如下:

import java.util.Scanner;
public class exam001 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int marks;
        while(true) {
            System.out.println("This is a gade checker program");
            System.out.println("Enter the marks from 0 to 100: ");
            System.out.println("Enter the marks: ");
            marks = scanner.nextInt();
            int grade = marks / 10;
            if (marks > 100) {
                System.out.println("Please enter the marks between the limit assigned");
            }
            else {
                switch(grade) {
                case 10:
                case 9:
                    System.out.println("Your grade is A");
                    break;
                case 8:
                case 7:
                    System.out.println("Your grade is B");
                    break;
                case 6:
                    System.out.println("Your grade is C");
                    break;
                case 5:
                case 4:
                    System.out.println("Your grade is D");
                    break;
                    
                default:
                    System.out.println("Your grade is E");
                    break;
                }
            }
        }
    }
}

我不知道,为什么 break 函数在这个循环中不起作用..请帮帮我..

【问题讨论】:

  • 你在switch 中有break,所以它只是从switch 中分离出来,而不是从while 中分离出来。您可以在switch 语句的末尾再添加一个break 语句。或者一个标签可以解决它。
  • 您的中断都在交换机内部,因此它们只是从交换机中中断。在 switch 之后添加一个 break 以跳出循环。或者你可以只从方法中return
  • 不是真正的重复,但 this other question 可能对“您可以从中 break 的嵌套构造”的一般情况有所帮助。

标签: java loops


【解决方案1】:

while 之外使用标签break 而不是switch

loop:
while(true) {
    // ...
    // later:
    switch (..) {
        case ..:
            break loop;
    } 
}

详见本教程:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

【讨论】:

  • 我认为值得指出的是,无论如何,在循环之外切换会更好。循环的唯一目的(假设所有的开关中断都是为了打破循环)是确保输入一个有效的分数。
  • @AndyTurner 简单 Q,简单 A
【解决方案2】:

它永远不会脱离它,因为break 指的是switch 声明

或者你可以询问用户是否跳出循环

public class exam001 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int marks;
        boolean again = true;
        while(again) {
            ...
            marks = scanner.nextInt();
            int grade = marks / 10;
            if (marks > 100) {
               ...
            } else {
                switch(grade) {
                   ...
                }
            }

            System.out.println("Do you want to insert another grade (y/n): ");
            String answer;
            do {
               String answer = scanner.nextLine();
            } while (answer.equalsIgnoreCase("y") || answer.equalsIgnoreCase("n")); 
            again = answer.equalsIgnoreCase("y");
            
        }
    }
}

【讨论】:

    【解决方案3】:

    您的break 语句只能在switch 语句中工作,以便打破循环试试这个:

    import java.util.Scanner;
    public class exam001 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int marks;
        while(true) {
            Boolean shouldBreak = false;
            System.out.println("This is a gade checker program");
            System.out.println("Enter the marks from 0 to 100: ");
            System.out.println("Enter the marks: ");
            marks = scanner.nextInt();
            int grade = marks / 10;
            if (marks > 100) {
                System.out.println("Please enter the marks between the limit assigned");
            }
            else {
                switch(grade) {
                    case 10:
                    case 9:
                        System.out.println("Your grade is A");
                        shouldBreak = true;
                        break;
                    case 8:
                    case 7:
                        System.out.println("Your grade is B");
                        shouldBreak = true;
                        break;
                    case 6:
                        System.out.println("Your grade is C");
                        shouldBreak = true;
                        break;
                    case 5:
                    case 4:
                        System.out.println("Your grade is D");
                        shouldBreak = true;
                        break;
                    
                    default:
                        System.out.println("Your grade is E");
                        shouldBreak = true;
                        break;
                    }
                    if (shouldBreak){
                        break;
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 由于在 所有 情况下您将 shouldBreak 设置为 true,因此该变量在此代码中似乎并不是必需的。
    【解决方案4】:
    boolean shouldBreak = false;
    while (!shouldBreak) {
        System.out.println("This is a gade checker program");
        System.out.println("Enter the marks from 0 to 100: ");
        System.out.println("Enter the marks: ");
        marks = scanner.nextInt();
        int grade = marks / 10;
        if (marks > 100) {
            System.out.println("Please enter the marks between the limit assigned");
        } else {
           switch(grade) {
              case 10:
              case 9:
                 System.out.println("Your grade is A");
                 shouldBreak = true;
                 break;
              case 8:
              case 7:
                 System.out.println("Your grade is B");
                 shouldBreak = true;
                 break;
              case 6:
                 System.out.println("Your grade is C");
                 shouldBreak = true;
                 break;
              case 5:
              case 4:
                 System.out.println("Your grade is D");
                 shouldBreak = true;
                 break;
              default:
                 System.out.println("Your grade is E");
                 shouldBreak = true;
          }
       }
    }
    

    建议:你应该在 while 语句中设置一个变量,这样每当你想突破时只需更改变量,这只是更简洁的方式,而不是打破 switch 语句然后使用 if 语句进行检查.. while 使用的是如果无论如何(那为什么不使用它呢?)

    @Ole V.V 在您的问题中发表评论。问题是你打破了 switch 语句,每个语句都有自己的级别。就像变量和全局变量一样,函数内部的变量会覆盖全局变量。所以你的 switch 语句覆盖了 while 循环的中断。除非在 switch 方法之外的 while 级别中直接使用“break”,否则不能使用“break”来中断 while 循环。

    【讨论】:

      【解决方案5】:
      
      import java.util.Scanner;
      public class exam001 {
          public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
              int marks;
              while(true) {
                  System.out.println("This is a gade checker program");
                  System.out.println("Enter the marks from 0 to 100: ");
                  System.out.println("Enter the marks: ");
                  marks = scanner.nextInt();
                  int grade = marks / 10;
                  if (marks > 100) {
                      System.out.println("Please enter the marks between the limit assigned");
                  }
                  else {
                      switch(grade) {
                      case 10:
                      case 9:
                          System.out.println("Your grade is A");
                          break;
                      case 8:
                      case 7:
                          System.out.println("Your grade is B");
                          break;
                      case 6:
                          System.out.println("Your grade is C");
                          break;
                      case 5:
                      case 4:
                          System.out.println("Your grade is D");
                          break;
                          
                      default:
                          System.out.println("Your grade is E");
                          break;
                      }
                  }
                  break;
              }
          }
      }
      
      

      您可以在while循环块内完成所有操作后添加break;语句,参见上面的代码块,当您在循环内完成所有操作时,这将结束循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-28
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 2020-08-05
        • 2015-05-08
        相关资源
        最近更新 更多