1
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

4 回答 4

1

像这样更改代码:

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

}

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

于 2012-05-05T10:35:20.920 回答
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--第二个循环中,而是在第二个循环之后(在第一个循环结束时)。

于 2012-05-06T08:57:46.103 回答
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

如果大括号{}内部循环中存在临时变量,那么我将得到以下输出:

(0 0 ) 0   (0 1 ) 10
(1 0 ) 0
于 2012-05-06T10:34:01.807 回答
0

这是因为 temp 和 k

在你的程序中首先 i=0

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

我=1

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

我=2

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

没有必要temp。要获得正确的输出,请使用此

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

}
于 2012-05-05T10:36:04.667 回答