Java:多维数组输出混乱?

时间:2012-05-05 10:31:14

标签: java arrays multidimensional-array

public class VarNoOfCols {
    public static void main(String[] args) {
        int a[][] = new int[3][];

        a[0]=new int[3];
        a[1]=new int[2];
        a[2]=new int[1];
        int temp=3;
        for(int i =0; i<3;i++) {
            for(int k=0;k<temp;k++) {
                a[i][k]= k*10;
                           temp-- ;
            }


        }
    }
}

---我假设的输出----低于---但这是不正确的。

(0 0) 0  (0 1) 10
(1 0) 0  (1 1) 10
(2 0) 0  (2,1) 10

我知道这是不正确的。 (我的问题是 - 在完成第二次迭代时,“k”大于“temp”,当条件失败时,它将停止内部状态并执行下一个工作(它假设是什么)。为什么我得到(0, 2)= 20,为什么我看不到(2,1)= 10?

您可以看到正确的输出:

(0 0) 0  (0 1) 10 (0 2) 20
(1 0) 0  (1 1) 10
(2 0) 0

我是学习者,我真的很感谢有人的帮助。谢谢

4 个答案:

答案 0 :(得分:1)

更改代码:

for(int i =0; i<3;i++)
{
    for(int k=0;k<3;k++)
        a[i][k]= k*10;

}

如果你想要一个方形输出,你为什么要使用控制变量temp来改变i上每次迭代输出的条目数?

答案 1 :(得分:0)

这是因为temp和k

首先在程序中

i = 0

  1. k = 0,temp = 3然后(0 0)所以输出0 * 10 = 0
  2. k = 1,temp = 2然后(0 1)因此输出1 * 10 = 10
  3. k = 2,temp = 1条件为for循环中的false(外部for循环中的条件(有i)是正确的但在内部for循环中为condation k

I = 1

  1. k = 0,temp = 3然后(10)所以输出0 * 10 = 0
  2. k = 1,temp = 2然后(11)所以输出1 * 10 = 10
  3. I = 2

    1. k = 0,temp = 3然后(2 0)所以输出0 * 10 = 0
    2. k = 1,temp = 2然后(2 1)因此输出1 * 10 = 10
    3. 不需要temp。要获得正确的输出,请使用此

      for(int i =0; i<3;i++)
      {
         for(int k=0;k<3;k++)
            a[i][k]= k*10;
      
      }
      

答案 2 :(得分:0)

实际上你的上一次编辑(使用temp--在第二次编辑中)你既没有获得第一个也没有第二个输出。

为什么吗

因为你永远不会重新分配temp,并且在3次减少后,第二个循环将不再被执行。所以你得到的值只有(0; 0)(0; 1)和(1; 0)。

为什么你无法获得输出1(方形一个)?

a[2] have a size of 1 so you can't have something in (2;1)

如何获取第二个输出?

不要将temp--放在第二个循环中,而是放在第二个循环之后(在第一个循环结束时)。

答案 3 :(得分:0)

public class VarNoOfCols {           
    public static void main(String[] args) { 

        int a[][] = new int[3][];

        a[0]=new int[3];
        a[1]=new int[2];
        a[2]=new int[1];

        int temp=3;

        for(int i =0; i<3;i++)
        {
            for(int k=0;k<temp;k++)
                //the inner for lopp doesn't have curly "{" braces.
                //temp will be 3 for 1st loop and when k becomes 3 it exit inner loop.
                a[i][k]= k*10;
            temp--;
        }
        //temp--;
        //System.out.println("temp : " +temp + " \n " );

    }   
}

谢谢你们。我发现了背后的逻辑。这不是逻辑,只是{应该被观看。如果我在内部循环中不使用大括号{,我会得到以下输出:

(0 0 ) 0   (0 1 ) 10   (0 2 ) 20
(1 0 ) 0   (1 1 ) 10
(2 0 ) 0

如果大括号{}在内部循环中出现内部循环中的temp变量,那么我将获得以下输出:

(0 0 ) 0   (0 1 ) 10
(1 0 ) 0