我一直在練習線程,所以我寫了這個定時遊戲,用戶需要猜測正確的數字(範圍從1-10)。如果用戶在時間限制內猜到了正確答案,則線程停止並且程序終止。當用戶在時間限制內未能猜出時,它無法工作。即使它在時間限制之後進入if語句,它仍然不能完全中斷該線程,除非我猜想正確的數字。我已閱讀其他線程,但他們似乎使用詢問有關「傳統」猜謎遊戲或利用Timer
。對於建議的解決方案的解釋和/或提示也被讚賞。猜測數字在時間限制內
import java.util.*;
import static java.lang.System.out;
import java.io.*;
public class Threading implements Runnable {
private static int num;
private static int k;
public void run() {
try {
Scanner line = new Scanner(System.in);
k = -1;
out.println("Guess!");
while (k != num) {
k = line.nextInt();
if (k != num) {
out.println("Nope");
}
}
}
catch (Exception e) {
out.println("I'm not done!");
}
}
public static void main(String args[]) throws InterruptedException {
num = (int) (Math.random() * 9 + 1);
out.println(num);
Thread t = new Thread(new Threading());
t.start();
long patience = 1000 * 5;
long startTime = System.currentTimeMillis();
while (t.isAlive()) {
t.join(1000);
if (((System.currentTimeMillis() - startTime) > patience) && t.isAlive()) {
out.println("I'm in here!");
t.interrupt();
t.join();
out.println("Times up!");
}
}
}
}
[如何中斷java.util.Scanner nextLine調用](https://stackoverflow.com/questions/4983065/how-to-interrupt-java-util-scanner-nextline-call) –
@MarkMucha是否有必要使用Streams/Buffers來使代碼正常工作?有沒有辦法結束'nextInt()'的「block」? – TypeHereToSearch