Java:为什么我的break语句不起作用?

时间:2016-10-26 19:46:37

标签: java loops for-loop break

这可能是一个非常简单的错误,但我是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语句并显示&#34; Invalid&#34;但是当我运行程序并输入一些内容时一个非数字,它不会离开for循环,并允许我像往常一样继续打字。

感谢您的时间。

4 个答案:

答案 0 :(得分:1)

Break语句工作正常。因为它打破了for循环的执行而不是do-while循环。如果你想在无效的case else块中打破do-while循环add 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");
    }
}

答案 1 :(得分:1)

  

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

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

来自Scanner java docs ...

  

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

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

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

总之,当你点击“Enter”时,程序不会按每次按键运行。

编辑 -

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你似乎想要打破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");
    }
}