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
,因此不会有小数。