当前位置: 首页 > 知识库问答 >
问题:

接受输入时的无限java循环

华心思
2023-03-14

我在while循环中遇到了这个问题:

while((input = InputHandler.getInt()) != 1 && input != 2){
        if(input == InputHandler.CODE_ERROR)
            System.out.print("Input must be a number");
    }

这个while循环只接受一次输入,不会再次请求它,所以它会循环整个时间接受一次该输入。我在这里做错了什么,因为对我来说,这个诡计循环真的很奇怪?

InputHandler类:

public class InputHandler {
  public static Scanner in = new Scanner(System.in);
  public static int CODE_ERROR = -6;

  public static int getInt(){
    try{
        return in.nextInt();
    } catch(InputMismatchException e){
        return CODE_ERROR;
    }
  }
}

共有2个答案

于鹏
2023-03-14

我运行代码,它工作正常,每次都要求输入,当我给出2或1个循环时就终止。下面是我运行的代码示例

   package testing;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test123 {
    public static Scanner in = new Scanner(System.in);
    public static int CODE_ERROR = -6;

    public static int getInt(){
        try{
            String in1 = in.next();
             return Integer.parseInt(in1);
            //return in.nextInt(); <-- This is leading to error
        } catch(Exception e){
            return CODE_ERROR;
        }
}

    public static void main(String[] args) {
        int input;

        while((input = Test123.getInt()) != 1 && input != 2){
            if(input == Test123.CODE_ERROR)
                System.out.print("Input must be a number");

            System.out.println("\nWrong number: "+input+" Please try again.");


            //input = Test123.getInt();
        }
    }

}

我不明白你为什么面临问题?

狄奕
2023-03-14

目前,如果在命令行中输入了非整数,您的代码会进入一个无休止的循环。这是因为您的in.nextInt()方法引发了异常,并将违规值留在了扫描仪中。

您需要使用导致异常的无效令牌,方法是调用in.next();

public static void main(String[] args) throws Exception {
    int input;
    while ((input = InputHandler.getInt()) != 1 && input != 2) {
        if (input == InputHandler.CODE_ERROR)
            System.out.print("Input must be a number");
    }
}

public static class InputHandler {
    public static Scanner in = new Scanner(System.in);
    public static int CODE_ERROR = -6;

    public static int getInt(){
      try{
          return in.nextInt();
      } catch(InputMismatchException e){
          in.next();  // <------------------ this should solve it
          return CODE_ERROR;
      }
    }
  }
 类似资料:
  • 我是java套接字编程的新手,我正在制作一个客户端服务器程序。服务器是多线程的。当客户端与服务器的连接打开时。服务器向客户端发送一个文本块,如下所示: 当我键入读取或退出或任何操作时,它工作正常,服务器响应。但是当我选择一个操作即插入时,就会出现问题—— 我不知道这个循环是如何发生的,特别是因为服务器在选择操作时正确接受输入,但是当选择插入操作时,它只是无限地接受输入,有人能帮忙吗,如果这个问题仍

  • 你好,有人能解释一下为什么这会形成一个无限循环吗。谢谢

  • 我是JAVA的新手,文本字段是否可以只接受数字输入?是否也有可能在代码内部有一个等式?例如:(毛额*10) 下面是我希望有数值输入的代码://Display private class Handler implements ActionListener{public void actionPerformed(ActionEvent e){

  • 问题内容: 假设我有一个代码,要求用户提供一些输入,例如: 但是我想给用户60秒的时间限制,然后抛出一个异常(在这种情况下,我认为是)。我怎么做? 问题答案:

  • 提前谢谢你的时间。

  • 所以我做了一个测试窗口,里面有一个JTextField。我不知道出了什么问题。下面是主要代码。问题是,无论我做什么,我都无法编辑文本字段,也无法编辑我创建的第二个文本字段。我有一个带有文本字段的示例程序,它也可以工作,但根本不工作。 我不确定是否需要发布它,但我可以在这里获得完整程序的示例罐。我只发布了处理文本字段的区域 编辑:完整的源代码可在此处获得:GITHUB 我移除了一些东西,它成功了,我