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

无法在cmd中为扫描器类输入键入输入

端木安国
2023-03-14

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

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 play(int player)-此函数从用户那里获取输入,并根据给定的输入修改char[]数据数组中的字符。

我是有问题,只有在获得输入从用户。

共有1个答案

鲜于意
2023-03-14

java.util.scanner.close()方法关闭扫描器。如果关闭了scanner对象,则不能从控制台获取输入。因此,从代码中删除scan.close(),它将像魅力一样工作。只关闭扫描仪对象在结束。关于扫描器类及其方法的更多信息

 类似资料:
  • 我想从静态块中的用户那里读取数据,并需要检查那里的一些条件,但当我试图调用nextInt()时,它会导致一些错误 线程“main”java.lang.ExceptioninInitializerError中出现异常 由:java.util.scanner.throwfor(scanner.java:862),java.util.scanner.next(Scanner.java:1485),jav

  • 问题内容: 我正在编写一个使用Event类的程序,该类中有一个日历实例和一个String类型的描述。创建事件的方法使用扫描仪获取月,日,年,小时,分钟和说明。我遇到的问题是Scanner.next()方法仅返回空格之前的第一个单词。因此,如果输入为“我的生日”,则该事件实例的描述就是“我的”。 我做了一些研究,发现人们使用Scanner.nextLine()解决此问题,但是当我尝试这样做时,它只是

  • 这里是Java新手,尝试扫描下面表单中的输入: 3 3 3 101 000 101 拜托,有更有经验的人能教我如何解决这个问题吗?我发现一些问题与。nextline()和。nextint()有类似的问题,但不完全是这样。不过,如果真的是复制品,我提前道歉... (如果需要,我会添加更多信息)

  • 我这里有两个代码块。一个扫描器正确地等待用户输入,另一个则直接通过它并调用,返回。下面是工作的块: 下面是没有的块: 这两个都是单独的类,并且是从另一个类中的main方法调用的。基本上,调用,后者又调用某个Player类的方法...这是非工作代码所在的地方。程序中是否有不适合接受输入的时候?我的印象是,任何时候我需要用户输入,我都可以使用这种方法。谢谢!

  • 我正在编写一个程序,将给定的整数简化为它们的最简单的比率。但是当通过Scanner类在一个子方法中获取输入时发生了一个错误。下面是代码: