生成具有for循环和n变量的网格

时间:2017-12-12 14:49:09

标签: java math datagrid

我想要一个数字列表,如下例所示: 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;
                    }
                }               
        }
    }
}

对于示例,我得到以下结果:

  • 1.0 0.0
  • 0.8 0.2
  • 0.6 0.4
  • 0.4 0.6
  • 0.2 0.8
  • 0.0 1.0
如果有人可以帮我解决问题,我将很高兴。

1 个答案:

答案 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,我的订单更好。仅使用两个循环也可以表现得更好。