零基础小白JAVA学习笔记(四)

 

 

                       今天想要对循环嵌套的问题进行下加深,所以在网上找了一些别人提的问题和一些测试题。

 

 

       先看下面这个,这个是别人在百度里的提问。

                   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语句,来增加“*”和“.”的打印次数。结果证明我的想法是正确的,小高兴下,现在循环嵌套的问题我掌握的还算可以吧,下一篇就看看函数吧。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值