0

次のコードがあります

    for (int k=0; k<maxThreads; k++) {
        int firstpart = k * tasksPerThread;
        int secondpart = ((k+1) * tasksPerThread) - 1;
        System.out.println(firstpart + "," + secondpart);
    }

ここで、maxThreads はユーザーが入力し、tasksPerThread は 10/maxThreads です。MaxThreads が 1 未満になることはありません。これにより、数値のペアが出力されます。たとえば、maxThreads = 2 (tasksPerThread = 5 にする) の場合、出力します。

0,4
5,9

0 ~ 9 の 10 個の値すべてをカバー

maxThreads = 4 の場合、10 個の値すべてをカバーする必要があります。現在、コードはこれを出力します

0,1
2,3
4,5
6,7

でも、0~9までカバーしてほしいです。したがって、理想的には出力されます

0-2
3-5
6-7
8-9

または、実際には maxThreads 個の数値セットを持ち、0 ~ 9 をカバーする任意の組み合わせです。これを行うために for ループを調整するにはどうすればよいですか?

ありがとうございました。

4

4 に答える 4

1

次のようなことができます:

for (int k = 0; k < maxThreads; k++) {
  int firstpart = (int) (k * tasksPerThread);
  int secondpart = (int) (((k + 1) * tasksPerThread) - 1);
  System.out.println(firstpart + "," + secondpart);
}

は次のようtasksPerThreadに計算されます。

double tasksPerThread = 10.0 / maxThreads;

または同等に

double tasksPerThread = 10 / (double) maxThreads;
于 2013-07-29T18:27:50.397 に答える
1

tasksPerThreadこの場合、変数に1 つのスレッドを追加する必要があります。あなたはそれを計算していますが、それに天井10/maxThreadsを適用する必要があります。

int tasksPerThread = Math.ceil(10/(double) maxThreads);

として取得すると、 div の結果は常に になるmaxThreadsため、 double として取得する必要があることに注意してください。intint

これはそれを行う必要があります:

 int tasksPerThread = Math.ceil(10/(double) maxThreads);
 for (int k=0; k<maxThreads; k++) {
    int firstpart = k * tasksPerThread;
    int secondpart = ((k+1) * tasksPerThread) - 1;
    System.out.println(firstpart + "," + secondpart);
}
于 2013-07-29T18:19:33.187 に答える