【问题标题】:Java: Why is my break statement not working?Java:为什么我的 break 语句不起作用?
【发布时间】:2016-10-26 19:46:36
【问题描述】:

这可能是一个非常简单的错误,但我是 Java(以及一般编程)的初学者,我很好奇为什么 break 语句在我的程序中不起作用。

public class ValidateStudentNumber
{
    public static void main(String[] args)
    {
        Scanner kb = new Scanner(System.in);
        do{
        System.out.println("Enter a number: ");
        String number = kb.next();

        boolean valid = true;

        for (int i = 0; i < number.length(); i++){
            char c = number.charAt(i);
            if(! Character.isDigit(c)) {
                valid = false;
                break;
            }
            if ( number.length() != 7) {
                valid = false;
            }
        }
        if (valid){
            System.out.println("Valid");
        }
        else{
            System.out.println("Invalid");
        }
    }
    while (kb.hasNext());
    System.out.println ("Program ending due to end-of-file");
    }
}

我想用这段代码完成的是,只要输入一个字母,for 语句就会中断并显示“无效”,但是当我运行程序并输入非数字的内容时,它不会离开 for 循环,让我可以像往常一样继续输入。

感谢您的宝贵时间。

【问题讨论】:

  • 为什么需要不断地检查循环内的number.length?如果输入的长度不正确,则每次检查循环内部长度的长度是没有意义的/重复的。如果长度不正确,则检查其他任何内容都没有意义——即使只有数字也是完全错误的。

标签: java loops for-loop break


【解决方案1】:

Break 语句工作正常。因为它破坏了 for 循环的执行,而不是 do-while 循环。如果要中断 do-while 循环,请在无效 case else 块中添加 break 语句。

public class A
{
    public static void main(String[] args)
    {
        Scanner kb = new Scanner(System.in);
        do{
        System.out.println("Enter a number: ");
        String number = kb.next();

        boolean valid = true;

        for (int i = 0; i < number.length(); i++){
            char c = number.charAt(i);
            if(! Character.isDigit(c)) {
                valid = false;
                break;
            }
            if ( number.length() != 7) {
                valid = false;
            }
        }
        if (valid){
            System.out.println("Valid");
        }
        else{
            System.out.println("Invalid");
            break;
        }
    }
    while (kb.hasNext());
    System.out.println ("Program ending due to end-of-file");
    }
}

【讨论】:

    【解决方案2】:

    我想用这段代码完成的是,只要输入一个字母,for 语句就会中断并显示“无效”

    如果我正确理解您的问题,您希望在输入数字时按字面意思按键盘上的非数字键,循环到 break

    来自Scanner java 文档...

    扫描操作可能会阻塞等待输入。

    可能发生的情况是控制台被阻止等待回车(即您按 Enter)然后处理您的输入。因此,您的程序不会在每次按键时都运行,而是等待输入整行。

    当您删除您的 do-while 循环时,这一点最为明显。删除后,您可以看到您可以输入许多字符,直到您按 Enter 键,您的程序确定输入的字符串是否有效,然后程序结束。

    总之,程序不会在每次按下“Enter”时运行。

    编辑 -

    这里有一个问题(以及您的问题的可能解决方案),试图弄清楚如何一次读取一个字符。看来您需要将控制台置于“原始”模式。

    How to read a single char from the console in Java (as the user types it)?

    【讨论】:

      【解决方案3】:

      您似乎想跳出 do/while 而不仅仅是 for 循环。这可以通过标记循环来完成。所以你可以重写你的代码:

      class ValidateStudentNumber
      {
          public static void main(String[] args)
          {
              Scanner kb = new Scanner(System.in);
      
              outer:do{
                 System.out.println("Enter a number: ");
                 String number = kb.next();
      
                 for (int i = 0; i < number.length(); i++){
                    char c = number.charAt(i);
                    if(! Character.isDigit(c) || number.length() != 7) {                    
      
                        System.out.println("Invalid");
                        break outer;
                    }
                 }//end of for loop  
          }while (kb.hasNext());
          System.out.println ("Program ending due to end-of-file");
          }
      }
      

      【讨论】:

        【解决方案4】:

        break 会让你退出包含 break 语句的循环,即在你的代码中它会让你脱离for-loop。然后它继续等待扫描仪的输入。一旦你再次输入内容,条件为真,然后循环重新运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-25
          • 1970-01-01
          • 2011-07-16
          • 2012-07-21
          • 1970-01-01
          相关资源
          最近更新 更多