繁体   English   中英

在Java中使用字符串打破循环

[英]using string to break out of loop in java

如果用户在扫描仪中输入“ STOP”,我只是想打破while true循环。 目前,我的扫描仪只接受整数,我相信这就是问题所在。 如果我尝试键入“ STOP”,则会收到很多错误,提示“线程主线程中的异常”。 这是我的代码片段:

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 (一个int)不可能包含字符串“ STOP”(无论何时您调用nextInt()时,扫描程序都会抛出异常,但是它遇到一个字符串,例如“ STOP”,因此无法转换为int)。

为此,您需要从输入中读取字符串(可能使用Scanner.nextLine() ),检查它们是否为“ STOP”,如果不是,则仅使用以下方法尝试将它们转换为int:

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
}

另请参阅此相关问题

如下所示,应该可以解决。

注意:还没有测试过编译错误,就把它写出来了(但是你有一个要点)

     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;
    }

最简单的方法可能是使用input.next()而不是input.nextInt()。 使用input.next()会将输入作为字符串读取,然后您可以检查输入是否等于“ QUIT”,如果不是,则可以使用Integer.parseInt从读取的字符串中解析Integer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM