循环

时间:2017-01-13 22:05:46

标签: java while-loop java.util.scanner wait

如何检查输入是否可以从Scanner获得而不会有阻止风险?

例如,考虑下面的方法。在每次循环迭代中,它应该接受用户输入(如果有),但如果没有输入,则继续进行输入。相反,reader.nextLine()在继续之前等待用户输入一行。

public void creatureCombate() {

    while (true) {
        Scanner reader = new Scanner(System.in);
        String userInput = reader.nextLine();

        wait(1);
        System.out.println("Wolf attacks");

        if(userInput.equals("hit")){
            System.out.println("hit wolf");
        } else{
            System.out.println("Tries again");  
        }
    }
}

2 个答案:

答案 0 :(得分:0)

不,如果没有输入,“无法继续输入”,因为所有nextXxx()hasNextXxx()方法都在阻止。

如果您希望在等待输入时执行代码(例如狼攻击),则需要多个线程。

答案 1 :(得分:0)

您需要使用多个线程并使main thread等待,直到input完成或超时,例如:

public static void main(String[] args) throws Exception {
    final List<String> input = new ArrayList<>();
    Scanner scanner = new Scanner(System.in);
    int count = 0;
    while (count < 10) {
        Runnable inputThread = () -> {
            scanner.reset();
            System.out.println("Enter input");
            try{
                String line = scanner.nextLine();
                input.add(line);
            }catch(Exception e){}
        };

        Thread t = new Thread(inputThread);
        t.start();

        Thread.currentThread().join(10000);
        t.interrupt();

        if(input.isEmpty()){
            System.out.println("Nothing enteresd");
        } else{
            System.out.println("Entered :" + input.get(0));  
            input.clear();
        }
        count++;
    }
    scanner.close();
}