问一个比较幼稚java问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 15:05:39
前几天在网上看到这个程序如下:
在我看来,第一次循环后j的值应该是2,但我测试后居然是3,第二次后居然是6,看看各位的回答
public class zbwee
{
public static void main(String[] args)
{
int[] arr={1,8,7,8,5,5,4,7,8,7,7};
int j=0,i;
for (i=0;i<3;i++)
{
for (;j<(i+1)*3;j++)
{
System.out.print(arr[j]+"\t");
}
//System.out.println("\t"+j);
System.out.println();
}
}
}
结果如下:
1 8 7 3

8 5 5 6

4 7 8 9
嗯,其实都说的有点道理,大概是一楼兄弟没有弄明白我的问题吧,其实我就是想讨论这个在执行程序的时候之后j的值,这个虽然在没有满足的情况下也执行了程序,谢谢了

第一次循环 你的第二个循环相当于 for(;j<3;j++) 这样,当j=3的时候才会跳出循环啊。所以j当然等于3。
第二个也是同理。

也就是说你随便写个程序,如:
int i=0;
for(i=0;i<2;i++){
}
System.out.print(i);
这个时候i一定是等于2的。

for (;j<(i+1)*3;j++)
{
System.out.print(arr[j]+"\t");
}

记住,以上的for循环j的取值分别是0, 1, 2
为什么有个2?因为当j取值为1,并输出之后,循环仍会执行j++,再判断j<(i+1),这时判断结果为false才跳出循环
顺带一说,任何for循环都可以用while代替,如下:
(c1, c2, c3, c4是表达式)
for(c1; c2; c3)
{
c4;
}
相当于
c1;
while(c2)
{
c4;
c3;
}
以上两种写法是基本等价的(唯一的区别是c1在for里写的话,结束了循环就会被释放了,而c1单独写在外面,结束了循环仍有效)
注意while循环里的c3,是每次执行c4之后就会执行一次的,之后才判断c2

看到这里相信你已经明白了~~

public class zbwee
{
public static void main(String[] args)
{
int[] arr={1,8,7,8,5,5,4,7,8,7,7};
int j=0,i;
for (i=0;i<3;i++)
{
for (;j<(i+1)*3;j++)
{
System.out.print(arr[j]+"\t");