这可能是一个非常简单的错误,但我是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循环,并允许我像往常一样继续打字。
感谢您的时间。
答案 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");
}
}