今天想要对循环嵌套的问题进行下加深,所以在网上找了一些别人提的问题和一些测试题。
先看下面这个,这个是别人在百度里的提问。
for(int i = 0; i <6; i++)
{
int k = ++i;
while(k < 5)
{
System.out.print(i);
k+=2;
}
}
先来查看下这个问题的运行结果是什么。
首先,这段代码里有两个循环结构。其中,while是内循环,for是外循环。然后根据流程来进行就可以了。
我先自己来看下,首for里的i的值是0,然后判断i<6结果为真,执行 k= ++i;因为++在前,所以k的值赋的是i自增后的值,即1,接着进入while循环,判断k<5,结果为真,向下执行,先打印i,因为i之前的自增,所以打印结果为1;接着执行 k +=2; ,此时K的值为3,回到while判断,k仍小于5,继续循环。
最后的结果为113.
提问人的问题就是为什么结果是113,没什么好说的,思路就是我刚才所写的,应该是提问的人对于循环语句的流程还没有弄清楚。
—————————————————————————————————————————————————————————————————————————————
接下来的题里的循环结构看起来挺复杂
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int x=0;
for(int i=1;i<=4;i++){
x=4;
for(int j=1;j<=3;j++){
x=3;
for(int k=1;k<=2;k++){
x=x+6;
}
}
}
System.out.println(x);
还是先来分析下结果。刚一看见这么多for, 我也有点晕了,仔细看下,是要打印最后x的值,但是奇怪的地方就是,在第一个for和第二个for里,x都是被重新赋值的,所以不管前面循环回来的x值是多少,都会被重新赋给4和3,所以最外面的for就执行到循环结束,x也还是会被第二个for赋给3,所以这段代码里,真正能够记录并运算x的值,是从x=3之后开始的。结果就是15。
—————————————————————————————————————————————————————————————————————————————
终于找到一道不是别人求助的问题,而且也是比较典型的循环嵌套类型的试题
编写一个程序,输出以下图形:
*
*.*.
*..*..*..
*...*...*...*...
*....*....*....*....*....
*.....*.....*.....*.....*.....*.....
*......*......*......*......*......*......*......
*.......*.......*.......*.......*.......*.......*.......*.......
class SonyTest
{
public static void main(String[] args)
{
for (int a=0;a<=7 ;a++ )
{
for (int d=0;d<a ;d++ )
{
for (int b=a;b<=a ;b++ )
{
System.out.print("*");
}
for (int c=0;c<a ;c++ )
{
System.out.print(".");
}
}
System.out.println();
}
}
}
这是第一次写的,不过运行结果却是
*.
*..*..
*...*...*...
*....*....*....*....
*.....*.....*.....*.....*.....
*......*......*......*......*......*......
*.......*.......*.......*.......*.......*.......*.......
然后我把控制打印“.”的条件改了一下
class SonyTest
{
public static void main(String[] args)
{
for (int a=0;a<=7 ;a++ )
{
for (int d=0;d<a ;d++ )
{
for (int b=a;b<=a ;b++ )
{
System.out.print("*");
}
for (int c=1;c<a ;c++ )
{
System.out.print(".");
}}
System.out.println();
}
}
}
执行程序,结果为
*
*.*.
*..*..*..
*...*...*...*...
*....*....*....*....*....
*.....*.....*.....*.....*.....*.....
*......*......*......*......*......*......*......
虽然图形是出来了,可是仔细一看,多了一个换行,稍微改下
class SonyTest
{
public static void main(String[] args)
{
for (int a=0;a<=7 ;a++ )
{
for (int d=0;d<=a ;d++ )
{
for (int b=a;b<=a ;b++ )
{
System.out.print("*");
}
for (int c=0;c<a ;c++ )
{
System.out.print(".");
}}
System.out.println();
}
}
}
网上说这是一道sony的笔试题,虽然不知道是真是假,不过在编写过程中,还是发现了一些规律。
首先说最外面的for,是控制这个图形的打印行数的,开始的时候我只在里面写了两个同级for语句,但是打印出的结果是
*
*.
*..
*...
*....
*.....
*......
*.......
查看结果明显可以看到循环次数少了,所以我就想在控制"*","."的循环里再加一个for语句,来增加“*”和“.”的打印次数。结果证明我的想法是正确的,小高兴下,现在循环嵌套的问题我掌握的还算可以吧,下一篇就看看函数吧。