0

特定の配列の各値を特定の時間で出力する際に​​問題があります。たとえば、「Value1」、「Value2」、「Value3」という値の配列があります。「Value1」、5秒後に「Value2」、5秒後に「Value3」を出力したい。代わりに、配列のすべての値が 3 回出力されます。あなたが私を助けることができれば、私はとても感謝しています. )) ありがとう.

これが私のコードです。

import java.util.Date;

public class Timer2 {

    /**
     * @param args
     */
    public static void main(String[] args) {

        long start = new Date().getTime();

        for (int i = 0; i < 4; i++) {
            new java.util.Timer().schedule(new java.util.TimerTask() {

                public void run() {
                    String[] arrayElements = { "value1", "value2", "value3",
                            "value4" };
                    for (int i = 0; i < arrayElements.length; i++)
                        System.out.println(arrayElements[i]);

                }
            }, new Date(start));
            start += 1000;
        }
    }

}
4

3 に答える 3

3

scheduleAtFixedRate を使用するクロスポストでの私の回答からの解決策:

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

class Timer2 {

   private static final String[] ARRAY_ELEMENTS = {"value1", "value2", "value3", "value4"};

   public static void main(String[] args) {
      final Timer utilTimer = new Timer();
      utilTimer.scheduleAtFixedRate(new TimerTask() {
         private int index = 0;

         public void run() {
            System.out.println(ARRAY_ELEMENTS[index]);
            index++;
            if (index >= ARRAY_ELEMENTS.length) {
               utilTimer.cancel();
            }
         }
      }, 5000L, 5000L);
   }

}
于 2011-04-02T21:08:12.310 に答える
3

あなたがやりたいと説明したことを行う最も簡単な方法は次のとおりです。

public static void main(String[] args) throws InterruptedException {
    String[] arrayElements = { "value1", "value2", "value3", "value4" };

    for (int i = 0; i < arrayElements.length; i++) {
        System.out.println(arrayElements[i]);
        Thread.sleep(5000);
    }   
}

TimerTask を使用する必要がある場合は、次のようにします。

public static void main(String[] args) throws InterruptedException {
    String[] arrayElements = { "value1", "value2", "value3",
    "value4" };

    long start = System.currentTimeMillis();

    for (int i = 0; i < arrayElements.length; i++) {
        final String value = arrayElements[i];
         new java.util.Timer().schedule(new java.util.TimerTask() {
                public void run() {
                    System.out.println(value);
                }
         }, new Date(start));

         start += 5000;
    }       
}
于 2011-04-02T19:00:35.280 に答える
0

印刷ループを TimeTask.run() に配置すると、実行時にすべての値が一度に印刷されます。必要なことは、配列要素ごとに時間タスクを作成することです。何かのようなもの:

String[] arrayElements = {"value1", "value2", "value3", "value4"};
for (final String arrayElement : arrayElements)
{
  new java.util.Timer().schedule(
    new java.util.TimerTask()
    { 
      public void run()
      {
        System.out.println(arrayElement);
      }
    },
    new Date(start)
  );
  start+=1000;
}

お役に立てれば。

于 2011-04-02T19:00:44.023 に答える