Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否具有for循环输出的数字集?_Java_For Loop - Fatal编程技术网

Java 是否具有for循环输出的数字集?

Java 是否具有for循环输出的数字集?,java,for-loop,Java,For Loop,我有以下代码 for (int k=0; k<maxThreads; k++) { int firstpart = k * tasksPerThread; int secondpart = ((k+1) * tasksPerThread) - 1; System.out.println(firstpart + "," + secondpart); } 覆盖所有10个值0-9 如果maxThreads=4,我希望覆盖所有十个值

我有以下代码

    for (int k=0; k<maxThreads; k++) {
        int firstpart = k * tasksPerThread;
        int secondpart = ((k+1) * tasksPerThread) - 1;
        System.out.println(firstpart + "," + secondpart);
    }
覆盖所有10个值0-9

如果maxThreads=4,我希望覆盖所有十个值。现在代码输出这个

0,1
2,3
4,5
6,7
但我希望它涵盖0-9。因此,理想情况下,它将输出

0-2
3-5
6-7
8-9
或者是任何一个组合,它包含了大量的数字集,覆盖范围为0-9。如何调整for循环以执行此操作


多谢各位

我想是向下舍入,尝试使用天花板。

是向下舍入,我想,尝试使用天花板。

在这种情况下,您必须在
tasksPerThread
变量中多取一个线程。您将其计算为
10/maxThreads
,但需要对其应用上限

int tasksPerThread = Math.ceil(10/(double) maxThreads);
请注意,必须将
maxThreads
作为双精度,因为如果将其作为
int
,div结果将始终是
int

这应该做到:

 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);
}
int tasksPerThread=Math.ceil(10/(双)个maxThreads);

对于(int k=0;k在本例中,您必须在
tasksPerThread
变量中多取一个线程。您将其计算为
10/maxThreads
,但需要对其应用上限

int tasksPerThread = Math.ceil(10/(double) maxThreads);
请注意,必须将
maxThreads
作为双精度,因为如果将其作为
int
,div结果将始终是
int

这应该做到:

 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);
}
int tasksPerThread=Math.ceil(10/(双)个maxThreads);

对于(int k=0;k您可以执行以下操作:

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

double tasksPerThread = 10 / (double) maxThreads;

您可以执行以下操作:

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

double tasksPerThread = 10 / (double) maxThreads;

此代码将在
maxThreads
线程之间划分n个任务:

public static void schedule(int n, int maxThreads) {
    int tasksPerThread = (n + maxThreads - 1) / maxThreads;
    int nExtra = tasksPerThread * maxThreads - n;
    int nFull = tasksPerThread * (maxThreads - nExtra);
    int start = 0;
    while (start < nFull) {
        int end = start + tasksPerThread - 1;
        System.out.printf("%1$d,%2$d%n", start, end);
        start = end + 1;
    }
    while (start < n) {
        int end = start + tasksPerThread - 2;
        System.out.printf("%1$d,%2$d%n", start, end);
        start = end + 1;
    }
}
publicstaticvoidschedule(intn,intmaxthreads){
int tasksPerThread=(n+maxThreads-1)/maxThreads;
int-nExtra=tasksPerThread*maxThreads-n;
int nFull=tasksPerThread*(maxThreads-nExtra);
int start=0;
while(启动
此代码将在
maxThreads
线程之间划分n个任务:

public static void schedule(int n, int maxThreads) {
    int tasksPerThread = (n + maxThreads - 1) / maxThreads;
    int nExtra = tasksPerThread * maxThreads - n;
    int nFull = tasksPerThread * (maxThreads - nExtra);
    int start = 0;
    while (start < nFull) {
        int end = start + tasksPerThread - 1;
        System.out.printf("%1$d,%2$d%n", start, end);
        start = end + 1;
    }
    while (start < n) {
        int end = start + tasksPerThread - 2;
        System.out.printf("%1$d,%2$d%n", start, end);
        start = end + 1;
    }
}
publicstaticvoidschedule(intn,intmaxthreads){
int tasksPerThread=(n+maxThreads-1)/maxThreads;
int-nExtra=tasksPerThread*maxThreads-n;
int nFull=tasksPerThread*(maxThreads-nExtra);
int start=0;
while(启动
我只希望它输出四组数字(或任意数量的maxthreads)。但是这四组数字必须包括0-9是的,我意识到了这一点,更改了我的答案。我只希望它输出四组(或任意数量的maxthreads)一组数字。但是四组数字必须涵盖0-9是的,我意识到了这一点,更改了我的答案。对不起,我的错误。我编辑了问题,使5没有写两次。对不起,我的错误。我编辑了问题,使5没有写两次。对不起,你说的上限是什么意思?如果值不完全是整数值,则表示四舍五入。F或者,如果div结果为2.1,则每个线程将执行3个任务,这是您所需要的。对于最后一个线程,只包括剩余的任务。谢谢。它现在显示0,2 3,5 6,8 9,11,但是如果可能,我希望它停止在9。我将如何执行此操作?不幸的是,该程序可能只有10个任务,并输出IndexOutOfBoundsexception是的,您的值超过了10。只需控制第二部分的值不会超过该值,如果超过该值,请将其设置为限制。您是否更改了代码?据我所知,
IndexOutOfBoundsException
只能在您有数组或列表时抛出(本例中不是这样)。很抱歉,你说的上限是什么意思?如果该值不完全是整数值,则表示向上舍入。例如,如果div结果为2.1,则每个线程将执行3个任务,这是你所需要的。对于最后一个线程,只需包括剩余的任务。谢谢。它现在显示0,2 3,5 6,8 9,11,但我希望它在9处停止如果可能的话。我该怎么做?不幸的是,该程序可能只有10个任务,并且它输出一个IndexOutOfBoundsException。如果是,您将超过10。只需控制第二部分的值不超过该值,如果它接受,则将其设置为限制。您是否更改了代码?据我所知,
IndexOutOfBoundsException
只能在创建数组或列表时抛出(本例中不是).
tasksPerThread
无法获得
double
范围值,否则结果可能会得到小数。一个线程中不能有一半任务,不是吗?我们正在将所有最终结果强制转换为
int
,因此不会有任何小数。
tasksPerThread
无法获得
double
范围值,否则结果会失败s可以得到小数。一个线程中不能有一半任务,不是吗?我们将所有最终结果都转换为
int
,因此不会有小数。