2017-02-28 4 views
1
package test; 

import java.util.Scanner; 
import java.util.Timer; 
import java.util.TimerTask; 

public class StopWatch 
{ 
    public static int interval; 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Input seconds => : "); 
     interval = input.nextInt(); 
     int delay = 1000; 
     int period = 1000; 
     Timer time = new Timer(); 
     System.out.println(interval); 
     time.scheduleAtFixedRate(new TimerTask() { 

      public void run() { 
       if (interval == 0) { 
        System.out.println("work finished"); 
       } else { 
        System.out.println(setInterval()); 
       } 
      } 
     }, delay, period); 
    } 

    private static int setInterval() {   
     return --interval; 
    }  
} 

私はそれを実行するとカウントから停止しないという問題があります!カウントダウンを行う方法(Javaのストップウォッチ)

だから、カウンタが0になったら停止させるにはどうすればいいですか?

答えて

0
package com.test; 

import java.util.Scanner; 
import java.util.Timer; 
import java.util.TimerTask; 

public class StopWatch 
{ 
    public static int interval; 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Input seconds => : "); 
     interval = input.nextInt(); 
     int delay = 1000; 
     int period = 1000; 
     final Timer time = new Timer(); 
     System.out.println(interval); 
     time.scheduleAtFixedRate(new TimerTask() { 

      public void run() { 
       if (interval == 0) { 
        System.out.println("work finished"); 
        time.cancel(); 
        time.purge(); 
       } else { 
        System.out.println(setInterval()); 
       } 
      } 
     }, delay, period); 
    } 

    private static int setInterval() { 

     return --interval; 
    } 

} 
+2

ヒント:あなたは、以下のように)(cancelメソッドを呼び出す必要があります答えは、単に読者のコードを投げて...非常に有用ではありません。あなたに(めったにupvoted)も読者のためにも; **ゼロ**の説明があるからです。そして、あなたが知っている、私が書いた3本の線を取る。それらを元のソースコードに入れることは、それを正確に補うものではありません。 – GhostCat

2

最後の反復でタイマーを停止するよう指示する必要があります。 like:

public void run() { 
    if (interval == 0) { 
    System.out.println("work finished"); 
    time.cancel(); 
    time.purge(); 

詳細については、javadocを参照してください。そのタイマを扱うスレッドは1つしかないので、ここではおそらくpurge()への呼び出しはしません。より汎用的なユースケースでは、それが必要になります。あなたはそれが匿名の内から外のローカル変数にアクセスするために保存しているコンパイラに伝えるために(ジャワのバージョンによって異なります)

final Timer time = new Timer(); 

Timer time = new Timer(); 

を変更する必要があります

内部クラス。

0

あなたの問題を迅速に解決します。

public static int interval; 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Input seconds => : "); 
     interval = input.nextInt(); 
     int delay = 1000; 
     int period = 1000; 
     Timer time = new Timer(); 
     System.out.println(interval); 
     time.scheduleAtFixedRate(new TimerTask() { 

      public void run() { 
       if (interval == 0) { 
        System.out.println("work finished"); 
        time.cancel(); 
       } else { 
        System.out.println(setInterval()); 
       } 
      } 
     }, delay, period); 
    } 

    private static int setInterval() { 

     return --interval; 
    } 

} 

ドミニクUbersfeld

+0

ヒント:既に存在する2つの回答を取って、それらをまとめて...さらなる洞察力や "付加価値"を提供せずに...あなたにアップアップをもたらすことはありません。 – GhostCat

関連する問題