我想要一个数字列表,如下例所示: List of Numbers 步数为0.2,所有行的总和始终为1.
对于n = 2的情况,它没有问题,但如果我想添加第三个变量(k),我会遇到一些问题。
public static void main(String[] args) {
for(double i=1.0;i>=0;i=i-0.2){
i = Math.round(100.0 * i) / 100.0;
for(double j=1-i;j<=1.0;j=j+0.2){
j = Math.round(100.0*j) /100.0;
if(i+j==1){
System.out.println(i+"\t"+j);
}
if(i+j<1){
for(double k =1-j-i;k<=1;k=k+.2){
k = Math.round(100.0*k)/100.0;
}
}
}
}
}
对于示例,我得到以下结果:
答案 0 :(得分:0)
您将j
设置为1-i
(或更多)。
因此i+j
评估为1+(1-i)
(或更多)。
i
始终小于或等于1
,因此i+j
始终为&gt; = 1+(1-1)
= 1
。
所以if(i+j<1)
永远不会评估为true
。
所以永远不会启动k
循环。
你究竟想用变量完成什么?我觉得你正试图以一种非常复杂的方式解决一个相当简单的问题。
我怀疑你正在寻找这样的东西:
public static void main(String[] args) {
for (int d1 = 0; d1 <= 10; d1++) {
for (int d2 = 0; d2 <= 10; d2++) {
for (int d3 = 0; d3 <= 10; d3++) {
if (d1 + d2 + d3 == 10) {
System.out.println("" + d1/10d + " " + d2/10d + " " + d3/10d);
}
}
}
}
}
输出:
0.0 0.0 1.0
0.0 0.1 0.9
0.0 0.2 0.8
0.0 0.3 0.7
0.0 0.4 0.6
...
但是仔细观察你的例子,我现在认为这就是你要找的东西:
public static void main(String[] args) {
for (int d3 = 10; d3 >= 0; d3--) {
for (int d2 = 10 - d3; d2 >= 0; d2--) {
int d1 = 10 - d2 - d3;
System.out.println(d1/10d + " " + d2/10d + " " + d3/10d);
}
}
}
它打印与示例中完全相同的项目。但是以不同的顺序。 Imo,我的订单更好。仅使用两个循环也可以表现得更好。