如何检查输入是否可以从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");
}
}
}
答案 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();
}