-1
public void execute(){
        for (int i=0;i<=100000000;i++)
        {
            System.out.println(i);
        }
    }

このメソッドは 2 秒間だけ実行する必要があります。つまり、for ループでこのメソッドの実行を開始した後、88888 を出力している間に 2 秒が終了した場合、プログラムはそこで停止する必要があります。それは可能ですか?

4

3 に答える 3

1

ループ内でいつでも使用break;して、ループをすぐに終了できます。これは、Java の任意のループ ( forwhile、 などdo...while) で機能します。例:

public void execute() {
    long startTime = System.currentTimeMillis();
    for (int i = 0; i <= 100000000; i++) {
        long currentTime = System.currentTimeMillis();
        if ((currentTime - startTime) >= 2000) {
            break;
        }
        System.out.println(i);
    }
}

これにより、時間が 2 秒以上 (大まかに) 経過すると、ループが終了します。

編集: @LouisWasserman がコメントしSystem.nanoTime()たように、うるう秒などの影響を受けずに、より正確に使用できます。2000000000代わりにそれを使用する場合は、精度を考慮して差が以上であることを確認してください。

于 2013-02-06T15:53:17.883 に答える
1

使用できますSystem.currentTimeMillis()。このようなもの:

public void execute(){
  long beginMillis = System.currentTimeMillis();
  for (int i=0;i<=100000000;i++)
  {
    if (System.currentTimeMillis() - beginMillis > 2000) {
      break;
    } 
    System.out.println(i);
  }
}

サイド ノード - 現在時刻の取得は実際には非常に遅いため、指定された反復回数ごとにチェックを行うことをお勧めします。急に 2 秒で停止することはありませんが、減速は小さくなります。

于 2013-02-06T15:57:16.360 に答える
0

@Marc Baumbachが述べたようbreak;に、ループしている場合に使用できます。

ただし、ループを終了するだけでなく、実際にメソッドを終了する場合は、return;キーワードを使用できます。

public class Tester {
    public static void main(String args[]) {
        for(int i=0; i<10; i++) {
            System.out.println(i);
            if(i==5) return;
        }
    }
}

印刷します...

0
1
2
3
4
5
于 2013-02-06T15:58:06.323 に答える