使用 `while(scanner.hasNextLine())` 时如何处理最后一行?
How do I process the last line when using `while(scanner.hasNextLine())`?
如标题所述,现在我有这样的东西:
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
string input = scanner.nextLine();
switch(input){
case 1:
do stuff;
break;
case 2:
do stuff;
break;
case 3;
printf("we're done here");
scanner.close();
System.exit(1);
}
}
显然,我的实际代码并不是这么简单,但总体思路是一样的。
循环有效,它会处理每一行直到最后一行。
这就是问题所在,它不会处理最后一行,实际上退出程序的那一行....
答案可能很简单,但我真的无法从脑海中想到它。如何处理最后一行?
您需要将最后一个 case 语句的代码移到 while 循环之外。扫描仪不会有另一条线,循环会中断。
试试下面的代码,使用 System.exit(0) 应该在开关外面。
Scanner scanner = new Scanner(System.in);
boolean flag = false;
while(scanner.hasNextLine()){
string input = scanner.nextLine();
switch(input){
case 1:
do stuff;
break;
case 2:
do stuff;
break;
case 3;
printf("we're done here");
flag = true;
break;
}
if(flag) {
System.exit(0); //try 'break' too.
}
}
如标题所述,现在我有这样的东西:
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
string input = scanner.nextLine();
switch(input){
case 1:
do stuff;
break;
case 2:
do stuff;
break;
case 3;
printf("we're done here");
scanner.close();
System.exit(1);
}
}
显然,我的实际代码并不是这么简单,但总体思路是一样的。 循环有效,它会处理每一行直到最后一行。 这就是问题所在,它不会处理最后一行,实际上退出程序的那一行....
答案可能很简单,但我真的无法从脑海中想到它。如何处理最后一行?
您需要将最后一个 case 语句的代码移到 while 循环之外。扫描仪不会有另一条线,循环会中断。
试试下面的代码,使用 System.exit(0) 应该在开关外面。
Scanner scanner = new Scanner(System.in);
boolean flag = false;
while(scanner.hasNextLine()){
string input = scanner.nextLine();
switch(input){
case 1:
do stuff;
break;
case 2:
do stuff;
break;
case 3;
printf("we're done here");
flag = true;
break;
}
if(flag) {
System.exit(0); //try 'break' too.
}
}