2014-10-01 135 views
-2

如果我有一個循環是這樣的:暫停循環

for(int i = 0; i <= 10; i++) { 
    System.out.println("Hello, User " + i; 
    Thread.sleep(1000) 
} 

我怎麼會去補充說,沒有要求用戶輸入的代碼,但如果用戶選擇了暫停環路在給定點,他們可以這樣做,並在幾分鐘後恢復?

+0

什麼?你說你不想用戶輸入,但是然後描述用戶輸入。你究竟想要做什麼? – tnw 2014-10-01 15:22:23

+0

我與@tnw - 你的意圖不明確。你想爲你的'i = 6'步驟硬編碼一個更長的中斷嗎? – chrisb2244 2014-10-01 15:30:10

+0

它不在代碼中,因爲我不知道它是否可能。如果用戶想輸入某些內容,我不希望它在每次迭代時都提出要求,我希望用戶能夠在每次迭代中的任意點輸入內容以便暫停它 – brianforan 2014-10-01 17:53:45

回答

0

爲此,您需要實現多線程。一個線程將運行循環(T1),而其他線程可以等待用戶輸入(T2)。

T1 - 同時 - >檢查,如果通過公共布爾屬性輸入 - > 繼續/中斷循環

T2 - 等待輸入 - >如果輸入== 「暫停」 - >集共同屬性爲true, 暫停循環

喜歡的東西:

class MultiThread implements Runnable { 

    boolean gotInput = false; 
    int i = 0; 
    public void run() { 
     for(;i <= 10 && !gotInput; i++) { 
      System.out.println("Hello, User " + i; 
      Thread.sleep(1000) 
     } 
    } 

    public static void main(String args[]) { 

     MultiThread mt = new MultiThread(); 
     Thread t = new Thread(mt); 
     t.start(); 

     Scanner s = new Scanner(System.in); 
     while (!s.next().equals("pause")); 

     test.gotInput = true; 
    } 
} 

在同一行,你可以恢復,如果NE代碼EDED。

0

嘗試創建後臺線程,等待1秒讓用戶選擇暫停。如果在1秒內未選中,請繼續前進。

這樣寫的方式,你的Thread.sleep()將鎖定用戶界面1秒,無論用戶做什麼,它都不會影響你的程序。