无法在cmd中输入扫描仪类输入的输入

问题描述 投票:0回答:2

我有这个代码,我试图通过扫描仪类从用户获取输入。我无法在输入控制台中输入任何内容。没有例外。只是计算机正在等待输入,我键入的内容未在控制台中显示。

import java.util.HashMap;
import java.util.Scanner;

class DataBreach extends Exception{}

public class tictactoe{
    char[] data = new char[]{' ',' ',' ',' ',' ',' ',' ',' ',' '};
    HashMap<Integer, Character> XO = new HashMap<Integer, Character>();

    void assignplayercharacter(){
        Scanner scan = new Scanner(System.in);
        while (true){
            String xo;
            System.out.print("Enter the player1 character(X or O):");
            while(!(scan.hasNext())){}
            xo = scan.next();
            if((xo.equals("x"))||(xo.equals("o"))||(xo.equals("X"))||(xo.equals("O"))){
                char x_o = xo.toUpperCase().charAt(0);
                XO.put(1,x_o);
                x_o = ((xo.toUpperCase().equals("X"))?'O':'X');
                XO.put(2,x_o);
                break;
            }
        }
        scan.close();
    }

    void play(int player){
        Scanner scan = new Scanner(System.in);
        while (true){
            int pos;
            System.out.print("Player"+player+"'s turn:");
            while(!(scan.hasNext())){}
            try{
                pos = Integer.parseInt(scan.next());
                if(data[pos-1]!=' '){
                    throw new DataBreach();
                }
                data[pos-1] = XO.get(player);
                break;
            }
            catch(java.util.InputMismatchException e){
                System.out.println("Please enter only numbers from 1-9");
                String leftover = scan.nextLine();
            }
            catch(java.lang.ArrayIndexOutOfBoundsException e){
                System.out.println("Please enter numbers only from 1-9");
            }
            catch(DataBreach e){
                System.out.println("That spot is already occupied. Please choose another spot");
            }

        }
        scan.close();
    }

    void game(){
        assignplayercharacter();
        play(1);
    }


    public static void main(String args[]){
        tictactoe obj = new tictactoe();
        obj.game();
    }
}

当我运行这个程序时,我能够获得第一个方法void assignplayercharacter的输入,但是第二个函数是void play(int player)。程序正在运行,控制台正在等待输入,但是当我输入时,控制台上没有出现该字符。如果我注释掉第一个方法void assignplayercharacter并且只是尝试运行void play(int player),我能够读取用户的输入。

void assignplayercharacter() - 该函数获取输入并将数据输入HashMap。

void play(int player) - 该函数从用户获取输入,并根据给定的输入修改char []数据数组中的字符。

P.S我只是在收到用户的输入时遇到问题。

java java.util.scanner
2个回答
0
投票

java.util.Scanner.close()方法关闭了扫描仪。如果您关闭了Scanner object,则无法从控制台获取输入。因此,从代码中删除scan.close(),它将像魅力一样工作。最后只关闭扫描仪对象。 More on Scanner class and its methods


0
投票

删除此行并再试一次:scan.close();第一行。 扫描仪应仅在最后关闭。

PS:为了使游戏工作,删除break;函数内的void play(int player)

© www.soinside.com 2019 - 2024. All rights reserved.