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

Java:为什么我的break语句不起作用?,java,loops,for-loop,break,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: ");

这可能是一个非常简单的错误,但我是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");
    }
}
公共类验证学生编号
{
公共静态void main(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
做{
System.out.println(“输入一个数字:”);
字符串编号=kb.next();
布尔有效=真;
对于(int i=0;i
我想用这段代码完成的是,一旦键入一个字母,for语句就会中断并显示“Invalid”,然而当我运行程序并键入非数字的内容时,它不会离开for循环,并允许我像往常一样继续键入


谢谢您的时间。

中断声明工作正常。因为它中断了for循环而不是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");
    }
}
公共A类
{
公共静态void main(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
做{
System.out.println(“输入一个数字:”);
字符串编号=kb.next();
布尔有效=真;
对于(int i=0;i
中断语句工作正常。因为它中断了for循环而不是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");
    }
}
公共A类
{
公共静态void main(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
做{
System.out.println(“输入一个数字:”);
字符串编号=kb.next();
布尔有效=真;
对于(int i=0;i
break
将使您退出包含break语句的循环,即在代码中,它将使您脱离
for循环。然后它继续等待来自扫描仪的输入。当您再次键入某个内容时,条件为true,然后循环重新运行。

break
将使您退出包含break语句的循环,即在代码中,它将使您脱离
for循环。然后它继续等待来自扫描仪的输入。一旦您再次键入某个内容,条件为true,然后循环将重新运行。

您似乎想打破do/而不仅仅是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");
    }
}
class ValidateStudentNumber
{
公共静态void main(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
外:你呢{
System.out.println(“输入一个数字:”);
字符串编号=kb.next();
对于(int i=0;i
您似乎想突破do/而不仅仅是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");
    }
}
class ValidateStudentNumber
{
公共静态void main(字符串[]args)
{
扫描仪kb=新扫描仪(System.in);
外:你呢{
System.out.println(“输入一个数字:”);
字符串编号=kb.next();
对于(int i=0;i
我想用这段代码完成的是,只要键入一个字母,for语句就会中断并显示“Invalid”

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

扫描仪
java文档

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

什么是