日期:2014-05-20  浏览次数:20893 次

for循环的循环变量赋初值否引起的怪结果,自己想不明白
//JDK   6   测试
//请大家不要考虑程序实际解决问题和算法拙劣的问题。
//集中炮火到for循环的循环变量赋初值否引起的怪结果。
class   Test{
public   static   void   main(String[]   args){
int   x=0,y=0,z=0;//变量已经有初始值
for(;x <=10;x++)//注意   无初始化x的语句
  for   (;y <=10;y+=2   )//注意   无初始化x的语句
    for   (z=0;z <=10;z+=3   )//注意   写了z=0      
      System.out.println( "x= "+x+ ",y= "+y+ ",z= "+z);
}
}
/*
结果输出:
x=0,y=0,z=0
x=0,y=0,z=3
x=0,y=0,z=6
x=0,y=0,z=9
x=0,y=2,z=0
x=0,y=2,z=3
x=0,y=2,z=6
x=0,y=2,z=9
x=0,y=4,z=0
x=0,y=4,z=3
x=0,y=4,z=6
x=0,y=4,z=9
x=0,y=6,z=0
x=0,y=6,z=3
x=0,y=6,z=6
x=0,y=6,z=9
x=0,y=8,z=0
x=0,y=8,z=3
x=0,y=8,z=6
x=0,y=8,z=9
x=0,y=10,z=0
x=0,y=10,z=3
x=0,y=10,z=6
x=0,y=10,z=9
*/
//1.4中,y不变。只有z变(对别人操作的印象,不保证准确)
/*
class   Test{
public   static   void   main(String[]   args){
int   x=0,y=0,z=0;//变量已经有初始值
for(;x <=20;x++)//注意   无初始化x的语句
  for   (;y <=33;y++   )//注意   无初始化x的语句
    for   (;z <=100;z+=3   )//////////////////////////////////注意   无z=0
     
      System.out.println();
}
}
程序输出:
x=0,y=0,z=0
x=0,y=0,z=3
x=0,y=0,z=6
x=0,y=0,z=9
*/
//1.4无输出

/*
class   Test{
public   static   void   main(String[]   args){
int   x=0,y=0,z=0;//变量已经有初始值
for(;x <=10;x++)//注意   无初始化x的语句
  for   (y=0;y <=10;y+=2   )//////////注意   写了y=0
    for   (z=0;z <=10;z+=3   )//////////注意   写了z=0
     
      System.out.println( "x= "+x+ ",y= "+y+ ",z= "+z);
}
}
//输出结果完整
1.4未试
*/

------解决方案--------------------
for (;y <=33;y++ )//注意 无初始化x的语句
for (;z <=100;z+=3 )//////////////////////////////////注意 无z=0


//这两个循环都只执行了1圈阿~~
------解决方案--------------------
for(;y <=10;j+=2)
y被修改了以后,下次再执行这个循环是修改后的值,是12
for(y=0;y <=10;j+=2)
y被修改了以后,下次再执行这个循环还是0
所以它后面的循环都只被执行一次。
------解决方案--------------------
这个一个关于变量的作用域的问题:
请楼主看清楚:
当你开始的时候,给初始值的时候
X = 0
Y = 0
Z = 0
都是为0
那个Z递历完之后
Y=Y+2
Z又开始变成原来的0
……
一直到第Y结束
最后到X的时候
由于Y没有重新赋值
Y还是原来的10
所以后来的代码不要执行
也就是说里面两个都不执行
所以就是你想的那个结果
不懂的话,可以再问?


建议 以后写成这样
当class Test{
public static void main(String[] args){
//int x=0,y=0,z=0;//变量已经有初始值
for(int x=0;x <=10;x++)//注意 无初始化x的语句
for (int y=0;y <=10;y+=2 )//注意 无初始化x的语句
for (int z=0;z <=10;z+=3 )//注意 写了z=0
System.out.println( "x= "+x+ ",y= "+y+ ",z= "+z);
}
}


------解决方案--------------------
同意楼上,作用域问题。
在for循环外面打印x,会得到x=10;循环已经走完
------解决方案--------------------
明显的变量作用域问题,dxlove() ( ) 信誉:100 讲的非常清楚了,lz结帖吧。
本身这三个变量就是在循环体之外定义的,但是z在循环体之内又重新给赋值了,所以才出现了lz的结果