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

如何使用Java Scanner获取整数输入?无接触元素异常

饶骁
2023-03-14

所以我一直在寻找如何使用扫描仪从用户那里获取输入。发生的事情是我在第一个扫描仪之后进入一个无限循环。我尝试将第二台扫描仪的名称改为read而不是in,但没有任何改变。我加入了。nextLine()位于第一个scanner实例的末尾,然后我关闭以尝试解决问题,但这似乎不起作用。不太清楚为什么会这样。

`   private int compPlayInput(){
        int comps = -1; // Initialize 

        Scanner in = new Scanner(System.in); // Start Scanner

        //While the user input isn't between 0 and 2
        while ((comps<0) || (comps>2)){
            System.out.println("Turn: " + turnCount);
            System.out.print("How many computer controlled players will there be: ");
            //did the user input an integer?
            if (in.hasNextInt()){
                comps=in.nextInt();//change comps variable to the user's input
            }
            //The user hasn't entered an integer
            else {
                System.out.println("\n\n** ERROR: Enter an integer x that satisfies 0 <= x <= 2 **\n");
            }
        }
        in.nextLine(); //It seems like this is supposed to fix it, but it doesn't.
        in.close(); // close scanner
        return comps;
    }

    /**
     * Gets a player's guess
     * @return the player's guess (int) between 0 and 4 inclusively
     */
    private int getPlayerGuess(){
        int guess = -1; //initialize
        Scanner in = new Scanner(System.in); //start scanner

        //While the user doesn't input an int between 0 and 4
        while ((guess<0) || (guess>4)){
            System.out.println("Turn: " + turnCount);
            System.out.print("What is your guess: ");
            //If the user input an integer
            if (in.hasNextInt()){
                //make guess = to next int
                guess=in.nextInt();
            }
            else {
                System.out.println("\n\n** ERROR: Enter an integer x that satisfies 0 <= x <= 4 **\n");
            }
        }

        in.close(); // close scanner
        return guess; //return guess
    }`

这是eclipse中的输出:

    Turn: 0
How many computer controlled players will there be: 1
Turn: 1
What is your guess: 

** ERROR: Enter an integer x that satisfies 0 <= x <= 4 **

Turn: 1
What is your guess: 

** ERROR: Enter an integer x that satisfies 0 <= x <= 4 **
...

不允许用户像询问有多少电脑播放器时那样输入猜测。我不知道我应该如何解决这个问题。

我把这个放进去了。next()转换到else语句中,但似乎出现了错误,因为扫描仪无法读取任何内容。我得到的新输出是

回合:0将有多少电脑控制的玩家:1回合:1你猜怎么着:

**错误:输入一个满足0的整数x

线程“main”java中出现异常。util。java中的NoSuchElementException。util。扫描仪。java上的throwFor(未知源)。util。扫描仪。HW2TaylorZacharyGame的下一个(未知来源)。HW2TaylorZacharyGame上的getPlayerGuess(HW2TaylorZacharyGame.java:114)。在HW2TaylorZachary转弯(HW2TaylorZacharyGame.java:52)。main(HW2TaylorZachary.java:15)

共有3个答案

公冶高义
2023-03-14

我找到了我的问题。似乎scanner不喜欢在单个类文件中被调用两次,所以我的解决方案是简单地创建一个新的Scanner对象,在其中我将为该对象放置我的私有变量。所以像这样:

public class HW2TaylorZacharyGame {

    private HW2TaylorZacharyPlayer player1 = new HW2TaylorZacharyPlayer();
    private HW2TaylorZacharyPlayer player2 = new HW2TaylorZacharyPlayer();
    private int winner = 0;
    private int turnCount = 0;
    Scanner in = new Scanner(System.in); // Start Scanner

对于一个让我很心痛的问题,非常简单的解决方案。不过,请注意,我还在从用户那里获取任何输入后放置了in.nextLine()。这两件事,对于其他有相同问题的人来说,在我看来是使用Scanner的最佳方式。不过,我也从未关闭过Scanner,所以不幸的是,这有点缺点。

狄富
2023-03-14

试着进来。next()而不是in。nextLine();把它放在else语句中

宣俊豪
2023-03-14

您需要在您的else中使用非代码int。比如,

else {
   System.out.printf("ERROR: Enter an integer x that satisfies 0 <= x <= 2: %s "
       + "does not qualify%n", input.nextLine());

}
 类似资料:
  • 有人能帮我破解这个代码吗?当我使用流时,我得到了NoSuchElement异常。替代方案(注释)工作正常。我想知道为什么它抛出异常,如果与流实现。下面是代码供大家参考:

  • 问题内容: 使用jQuery,如何获得具有插入符号(光标)焦点的输入元素? 换句话说,如何确定输入是否具有插入符号的焦点? 问题答案: 您应该使用哪一个?引用jQuery文档: 与其他伪类选择器(以“:”开头的选择器)一样,建议在:focus之前加上标签名称或其他选择器;否则,暗示通用选择器(“ *”)。换句话说,裸露等于。如果您正在寻找当前关注的元素,则$(document.activeElem

  • 我在java中有这段代码,代码工作得很好 你对这个问题有什么解决办法吗??? 谢谢

  • 我能够使用以下代码成功加载基于XML的属性文件: 我的财产文件代码 但是,当我运行这个时,我得到以下异常: 引起:org.xml.sax.SAXParseExc0019:元素类型属性的内容必须匹配(注释?,条目*)。在org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseExc0019(未知来源)在org.apache.xerces.ut

  • 问题内容: 我想找到一种方法来获取元素树的所有子元素,就像这样,因为自python 2.7版本以来已弃用,尽管现在我仍然可以使用它,但我不想再使用它了。 谢谢。 问题答案: 的所有子元素(后代): 一个更完整的示例: 排除根本身:

  • 我正在制作一个程序,让用户添加整数元素,获取其长度,并获取其中间元素。我的问题是,我不知道写什么来获得中间元素。我试图在互联网上搜索如何下载,但我找不到适合这个程序的代码行。 如何找到并获取用户输入单链表的中间元素?