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
我是学习者,我真的很感谢有人的帮助。谢谢
答案 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
I = 1
I = 2
不需要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