JAVA基础之其他流程控制语句:循环嵌套

时间:2022-09-08 16:38:11
/*用循环嵌套打印出下面这副图形。
*****
*****
*****
*****
根据以上图形我们知道,这个图形是5行,每行是5个*号。
我们可以将每一行看成一个循环,把每行的每颗*看成一个循环。
这自然就涉及到了循环嵌套。*/
for (int a=0;a<=4 ;a++ ) //外部循环就代表的每一行。循环五次就是五行。
{
for (int b=0;b<=4 ;b++ )//内部循环就代表每一行的*,循环五次就是五颗*
{
System.out.print("*");//print不加ln是因为加了就会导致每输出一*就是一行。
}
System.out.println();//但是不加的话就会导致所有符号连成一行,这也不是我们需要的。
//所以我们在每一行循环完毕的时候输出一个换行命令,这条语句就是纯粹的换行符。
}
System.out.println("------------");
/*练习题2
打印出一下图形
*****
****
***
**
* */
int e=5;//定义第三方变量是为了控制每一行的*依次递减。第一行是5个,所以我们初始值设为5.
for (int c=1;c<=5 ;c++ )//外循环依旧控制行数。
{
for (int d=1;d<=e ;d++ )//我们用e来限定区间,决定每行打印的*数。
{
System.out.print("*");
}
System.out.println();
e--;//递减是因为外循环循环一次,*就少打印一次。
}


//或者我们也可以这样写。
int f=1;
for (int g=1;g<=5 ;g++ )
{
for (int h=f;h<=5 ;h++ )//将外部变量赋值给内循环定义的变量,也能做到限定范围。
{
System.out.print("*");
}
System.out.println();
f++;//f我们赋值给了内循环变量,变量的最大值不变的情况下我们就只有自增来达到限定范围的目的。
}
//以上代码我们发现f与g的值变化是相同的所以我们可以将f替换为g.
//新的代码就可以这样写。
for (int g=1;g<=5 ;g++ )
{
for (int h=g;h<=5 ;h++ )
{
System.out.print("*");
}
System.out.println();
}
System.out.println("-------------");
/*练习题3
打印出以下图形。
*
**
***
****
*****
*/
int x=5;
for (int b=1;b<=5 ;b++ )
{
for (int c=x;c<=5 ;c++ )
{
System.out.print("*");
}
System.out.println();
x--;
}
//也可以写作:
int a=1;
for (int b=1;b<=5 ;b++ )
{
for (int c=1;c<=a;c++ )
{
System.out.print("*");
}
System.out.println();
a++;
}

//以上我们发现,a值与b值的变化是一样的,我们同样可以简化写为。
for (int b=1;b<=5 ;b++ )
{
for (int c=1;c<=b ;c++ )
{
System.out.print("*");
}
System.out.println();
}
System.out.println("------------");
/*练习题4
打印出以下图形
54321
5432
543
54
5
*/
int yuer=1;
for (int c=1;c<=5 ;c++ )
{
for (int b=5;b>=yuer ;b-- )
{
System.out.print(b);
}
System.out.println();
yuer++;
}
//同样,yuer的值和c的值变化是一样的。我们一样可以写为。
for (int c=1;c<=5 ;c++ )
{
for (int b=5;b>=c ;b-- )
{
System.out.print(b);
}
System.out.println();
}
System.out.println("------------");
/*练习题5
打印出以下图形
1
22
333
4444
55555 */
for (int b=1;b<=5 ;b++ )
{
for (int c=1;c<=b ;c++ )
{
System.out.print(b);
}//每行出现的数字正好对应行数,所以我们打印行数即可。
System.out.println();
}
System.out.println("------------");
/*练习题6
打印出以下图形。
* * * * * 
* * * *
 * * * 
  * *
   * */
for (int b=1;b<=5 ;b++ )
{
for (int d=2;d<=b ;d++ )
{
System.out.print(" ");
}
for (int c=b;c<=5 ;c++ )
{
System.out.print("* ");
}

System.out.println();
}
System.out.println("------------");
/*练习题7
打印出99乘法表  */
for (int b=1;b<=9 ;b++ )//99乘法表有9行。
{
for (int c=1;c<=b ;c++ )//内循环体是标准的正三角图形标准。
{
System.out.print(c+"*"+b+"="+c*b+"\t");
}
System.out.println();
}

/*转义字符:
\n 回车
\t 制表符
\b 退格
\r 按下回车键




其他流程控制语句
关键词:break(跳出);
应用范围:选择结构和循环结构。也就是switch语句和循环语句。
switch语句已经知道break怎么使用,这里单独说说循环语句。
比如: */
for (int b=1;b<3 ;b++ )
{
System.out.println("hello world!");
break;//循环体执行到这里的时候就会直接跳出整个循环结构,结束整个循环。
}
/*注意:不能将break放在执行语句的上面,执行语句执行不到编译会报错。

还有一种情况也要注意。*/
for (int b=0;b<2 ;b++ )
{
if (b==1)
{
break;
}
System.out.println("hello frend.");
}
/*虽然break作为if语句的执行语句出现,但是它跳出的却不是if语句,
 而是整个for循环结构。因为break只能跳出switch语句和循环语句。

所以这里的执行顺序是for条件满足后,进入循环体,第一次b赋值为0,不执行if语句,break就执行不到
输出"hello frend.",然后b自增,满足条件继续循环,if判断为true,执行break跳出。
到这里整个循环结构结束。

还有一种情况。*/
for (int b=0;b<3 ;b++ )
{
for (int c=0;c<3 ;c++ )
{
System.out.println("c="+c);
break;
}
}
System.out.println("------------");
/*当有循环嵌套的时候,break只会跳出当前所在的循环,而不是整个循环。
如果想要跳出指定的循环,就得给循环命名,break后跟上循环名即可。
比如:*/
yinyin:for (int b=0;b<3 ;b++ )
{
linghan:for (int c=0;c<3 ;c++ )
{
System.out.println("c="+c);
break yinyin;
}
}
/*上面指定了跳出的循环体,所以就只会执行一次c=0整个循环就结束了。
不过给循环命名这种方法用得不多,作为了解即可。


其他流程控制语句
关键词2 continue(继续)
作用范围:循环结构。
如果出现在其他地方,编译会失败。
例如:*/
for (int b=0;b<4 ;b++ )
{
if (b%2==0)
{
continue;
}
System.out.println("hello world.");
}
System.out.println("------------");
/*上面如果我们将continue写在输出语句的下面是没有意义的,因为循环本来就会继续执行
所以我们将它放到if语句里面才能准确的体现他的特点。
上面循环的运行顺序是:Boolean表达式条件满足,执行if语句,0模运2是等于0的,所以执行
continue,输出语句不再执行,直接返回到b变量自增,然后再判断boolean表达式结果
条件满足,进入if语句,1模运2不等于0,if判断结果为false,不执行里面的continue,
继续向下执行输出语句。
所以,最终会输出两次“hello world。”
因为0,2,才会满足if语句里面的条件。


由此我们看出continue的特点:
结束本次循环,继续下次循环。
所以continue单独存在时,除非特殊情况,否则不要有任何语句,因为执行不到。


同样,continue也可应用于循环嵌套;*/
yinyin:for (int b=0;b<3 ;b++ )
{
linghan:for (int c=0;c<3 ;c++ )
{
System.out.println("c="+c);
continue yinyin;
}
}
/*这里如果循环不命名的话,continue所在的位置存在意义不大。
循环体本应该输出执行语句9次。
因为命名了循环体,continue执行的是外循环,所以只执行3次执行语句输出。