在 SwitchCase 中用空行(Enter 键)结束 While 循环
Ending While loop with blank line(Enter key) inside SwitchCase
*修正输入扫描
我试图用 enter key/blank 行结束 while 循环
下面的测试代码工作正常。
Scanner scan = new Scanner(System.in);
String line;
while ( (line=scan.nextLine()).length() > 0)
{
System.out.println(line);
}
然而,当我将它集成到我的主程序中时(while 循环放置在 do-while 循环中的 int switch case 中)程序跳过代码 @case2 并将继续 do-while 循环
int input;
do{
System.out.print("Choose a function (-1 to exit): ");
input=scan.nextInt();
switch (input)
{
case 1:
break;
case 2:
//same while loop here
break;
}
}while(input!=-1);
示例输出:
Choose a function (-1 to exit): 1
Choose a function (-1 to exit): 2
//skip case2 coding
Choose a function (-1 to exit): 1
Choose a function (-1 to exit): -1
//program ends
我不是 100% 确定,但我认为扫描仪没有读取所有输入。当 Scanner 开始读取时缓冲区中有一个空行(一个换行符),所以它 returns 一个空行,这会导致你的行长度为 0 并立即退出循环。
以下是我对您当前计划的最佳猜测:
public class InputTest
{
public static void main( String[] args )
{
Scanner scan = new Scanner( System.in );
int input = 0;
do {
System.out.print( "Choose a function (-1 to exit): " );
input = scan.nextInt();
switch( input ) {
case 1:
System.out.println("..1");
break;
case 2:
System.out.println("..2");
//same while loop here
String line = scan.nextLine();
System.out.println(">>"+line+"<<");
while( line.length() > 0 ) {
System.out.println( " Read line: " + line );
line = scan.nextLine();
System.out.println(">>"+line+"<<");
}
break;
}
} while( input != -1 );
}
}
及其输出:
run:
Choose a function (-1 to exit): 1
..1
Choose a function (-1 to exit): 2
..2
>><<
Choose a function (-1 to exit): -1
BUILD SUCCESSFUL (total time: 11 seconds)
您可以看到该行打印为 >><<
,这意味着它已被读取但为空。我认为上面“2”的左边换行符,因为换行符不是数字 2 的一部分,会留在缓冲区中。
扫描器无法读取任何输入,因为当前行中没有标记(在您按 2 之后)。
在读取输入之前,您需要使用 scan.nextLine()(忽略当前行的其余部分并将扫描仪移动到下一行的开头)。
do{
System.out.print("Choose a function (-1 to exit): ");
input=scan.nextInt();
switch (input)
{
case 1:
break;
case 2:
scan.nextLine();//skips the entire current line.
while ( (line=scan.nextLine()).length() > 0)
{
System.out.println(line);
}
//System.out.println(line.length());
break;
}
}while(input!=-1);
输出
Choose a function (-1 to exit): 2
hello
hello
bye
bye
Choose a function (-1 to exit):-1
希望对你有帮助。
感谢您的帮助!经过反复试验,我得到了可以工作的代码
Scanner scan = new Scanner(System.in);
int input;
do{
System.out.print("Choose a function (-1 to exit): ");
input=scan.nextInt();
switch (input)
{
case 1:
break;
case 2:
System.out.println("..2");
String line;
scan.nextLine();//skips the entire current line.
while ( (line=scan.nextLine()).length() > 0)
{
System.out.println(line);
}
break;
}
}while(input!=-1);
System.out.println() 似乎清除了来自 scan.nextInt(),
的干扰
不过这只是我的理论
*修正输入扫描
我试图用 enter key/blank 行结束 while 循环
下面的测试代码工作正常。
Scanner scan = new Scanner(System.in);
String line;
while ( (line=scan.nextLine()).length() > 0)
{
System.out.println(line);
}
然而,当我将它集成到我的主程序中时(while 循环放置在 do-while 循环中的 int switch case 中)程序跳过代码 @case2 并将继续 do-while 循环
int input;
do{
System.out.print("Choose a function (-1 to exit): ");
input=scan.nextInt();
switch (input)
{
case 1:
break;
case 2:
//same while loop here
break;
}
}while(input!=-1);
示例输出:
Choose a function (-1 to exit): 1
Choose a function (-1 to exit): 2
//skip case2 coding
Choose a function (-1 to exit): 1
Choose a function (-1 to exit): -1
//program ends
我不是 100% 确定,但我认为扫描仪没有读取所有输入。当 Scanner 开始读取时缓冲区中有一个空行(一个换行符),所以它 returns 一个空行,这会导致你的行长度为 0 并立即退出循环。
以下是我对您当前计划的最佳猜测:
public class InputTest
{
public static void main( String[] args )
{
Scanner scan = new Scanner( System.in );
int input = 0;
do {
System.out.print( "Choose a function (-1 to exit): " );
input = scan.nextInt();
switch( input ) {
case 1:
System.out.println("..1");
break;
case 2:
System.out.println("..2");
//same while loop here
String line = scan.nextLine();
System.out.println(">>"+line+"<<");
while( line.length() > 0 ) {
System.out.println( " Read line: " + line );
line = scan.nextLine();
System.out.println(">>"+line+"<<");
}
break;
}
} while( input != -1 );
}
}
及其输出:
run:
Choose a function (-1 to exit): 1
..1
Choose a function (-1 to exit): 2
..2
>><<
Choose a function (-1 to exit): -1
BUILD SUCCESSFUL (total time: 11 seconds)
您可以看到该行打印为 >><<
,这意味着它已被读取但为空。我认为上面“2”的左边换行符,因为换行符不是数字 2 的一部分,会留在缓冲区中。
扫描器无法读取任何输入,因为当前行中没有标记(在您按 2 之后)。
在读取输入之前,您需要使用 scan.nextLine()(忽略当前行的其余部分并将扫描仪移动到下一行的开头)。
do{
System.out.print("Choose a function (-1 to exit): ");
input=scan.nextInt();
switch (input)
{
case 1:
break;
case 2:
scan.nextLine();//skips the entire current line.
while ( (line=scan.nextLine()).length() > 0)
{
System.out.println(line);
}
//System.out.println(line.length());
break;
}
}while(input!=-1);
输出
Choose a function (-1 to exit): 2
hello
hello
bye
bye
Choose a function (-1 to exit):-1
希望对你有帮助。
感谢您的帮助!经过反复试验,我得到了可以工作的代码
Scanner scan = new Scanner(System.in);
int input;
do{
System.out.print("Choose a function (-1 to exit): ");
input=scan.nextInt();
switch (input)
{
case 1:
break;
case 2:
System.out.println("..2");
String line;
scan.nextLine();//skips the entire current line.
while ( (line=scan.nextLine()).length() > 0)
{
System.out.println(line);
}
break;
}
}while(input!=-1);
System.out.println() 似乎清除了来自 scan.nextInt(),
的干扰
不过这只是我的理论