在 java 中使用字符串跳出循环
using string to break out of loop in java
如果用户输入 "STOP" 到扫描仪,我只是想跳出 while true
循环。目前我的扫描仪只接受整数,我相信这就是问题所在。如果我尝试输入 "STOP",我会收到很多错误 "exception in thread main"。这是我的代码片段:
public class algorithm {
private Scanner input = new Scanner(System.in);
int n;
while (true){
System.out.println("Eneter a number to check if it is odd or even, then hit enter: ");
System.out.println("Type 'STOP' to end the program");
n = input.nextInt();
String strN = String.valueOf(n); //convert integer to string
if (new String(strN).equals("STOP")){ //if string is STOP, breaks
System.out.println("Thanks for using my program");
break;
}
if (n % 2 == 0){
System.out.println(n+" is even");
continue;
}
else{
System.out.println(n+" is odd");
continue;
我知道我遗漏了一些右花括号,但请放心,它们都在我的实际代码中。谢谢
这是我收到的错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at OddOrEven.algorithm.checker(algorithm.java:13)
at OddOrEven.main.main(main.java:7)
您自己已经确定了问题 - 您的扫描仪只读取整数:
int n;
...
n = input.nextInt();
所以变量 n
(一个整数)不可能包含字符串 "STOP" (并且当你调用 nextInt()
但它遇到一个字符串时,你的扫描仪无论如何都会抛出异常,例如 "STOP",它不能转换为 int)。
为此,您需要从输入中读取字符串(可能使用 Scanner.nextLine()
),检查它们是否为 "STOP",如果不是,则尝试将它们转换为整数,使用类似于:
int n = Integer.parseInt(mystring)
要处理垃圾输入(既不是 STOP 也不是整数),请将 parseInt
行包装在 try-catch
块中,以便您可以通过捕获 Exception
try {
int i = Integer.parseInt(mystring);
// do something with the int
}
catch (NumberFormatException e) {
// display warning message to the user instead
}
另请参阅此 related question。
最简单的方法可能是使用 input.next() 而不是 input.nextInt()。使用 input.next() 会将输入作为字符串读取,然后您可以检查输入是否等于 "QUIT",如果不是,您可以使用 Integer.parseInt 从读取字符串
类似下面的内容应该可以解决。
注意:还没有测试过编译错误,只是把它写出来(但你明白了要点)
public Scanner input = new Scanner(System.in);
int n;
while (true){
System.out.println("Eneter a number to check if it is odd or even, then hit enter: ");
System.out.println("Type 'STOP' to end the program");
n = input.next();
Integer input;
// String strN = String.valueOf(n); //convert integer to string
if (strN.equals("STOP")){ //if string is STOP, breaks
System.out.println("Thanks for using my program");
break;
}
else{
try{
input= Integer.parseInt(strN);
}
catch(Exception e)
{
System.out.println("Please enter a number");
}
}
if (input % 2 == 0){
System.out.println(n+" is even");
continue;
}
else{
System.out.println(n+" is odd");
continue;
}
如果用户输入 "STOP" 到扫描仪,我只是想跳出 while true
循环。目前我的扫描仪只接受整数,我相信这就是问题所在。如果我尝试输入 "STOP",我会收到很多错误 "exception in thread main"。这是我的代码片段:
public class algorithm {
private Scanner input = new Scanner(System.in);
int n;
while (true){
System.out.println("Eneter a number to check if it is odd or even, then hit enter: ");
System.out.println("Type 'STOP' to end the program");
n = input.nextInt();
String strN = String.valueOf(n); //convert integer to string
if (new String(strN).equals("STOP")){ //if string is STOP, breaks
System.out.println("Thanks for using my program");
break;
}
if (n % 2 == 0){
System.out.println(n+" is even");
continue;
}
else{
System.out.println(n+" is odd");
continue;
我知道我遗漏了一些右花括号,但请放心,它们都在我的实际代码中。谢谢
这是我收到的错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at OddOrEven.algorithm.checker(algorithm.java:13)
at OddOrEven.main.main(main.java:7)
您自己已经确定了问题 - 您的扫描仪只读取整数:
int n;
...
n = input.nextInt();
所以变量 n
(一个整数)不可能包含字符串 "STOP" (并且当你调用 nextInt()
但它遇到一个字符串时,你的扫描仪无论如何都会抛出异常,例如 "STOP",它不能转换为 int)。
为此,您需要从输入中读取字符串(可能使用 Scanner.nextLine()
),检查它们是否为 "STOP",如果不是,则尝试将它们转换为整数,使用类似于:
int n = Integer.parseInt(mystring)
要处理垃圾输入(既不是 STOP 也不是整数),请将 parseInt
行包装在 try-catch
块中,以便您可以通过捕获 Exception
try {
int i = Integer.parseInt(mystring);
// do something with the int
}
catch (NumberFormatException e) {
// display warning message to the user instead
}
另请参阅此 related question。
最简单的方法可能是使用 input.next() 而不是 input.nextInt()。使用 input.next() 会将输入作为字符串读取,然后您可以检查输入是否等于 "QUIT",如果不是,您可以使用 Integer.parseInt 从读取字符串
类似下面的内容应该可以解决。
注意:还没有测试过编译错误,只是把它写出来(但你明白了要点)
public Scanner input = new Scanner(System.in);
int n;
while (true){
System.out.println("Eneter a number to check if it is odd or even, then hit enter: ");
System.out.println("Type 'STOP' to end the program");
n = input.next();
Integer input;
// String strN = String.valueOf(n); //convert integer to string
if (strN.equals("STOP")){ //if string is STOP, breaks
System.out.println("Thanks for using my program");
break;
}
else{
try{
input= Integer.parseInt(strN);
}
catch(Exception e)
{
System.out.println("Please enter a number");
}
}
if (input % 2 == 0){
System.out.println(n+" is even");
continue;
}
else{
System.out.println(n+" is odd");
continue;
}