四、java流程控制(三)——循环控制

原创 2013年12月05日 23:13:58

4.3 循环控制

听其名而知其意,就是让代码可以循环地执行。

4.3.1 for语句

for(循环初值;循环条件;步长)

{

语句; //循环体

}

 

思考题:

编写一个程序,可以打印10

“为何我这么屌!”

分析:

可以用for语句

代码:

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-2

功能:用for语句,打印十句“为何我这么屌”

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

int i;

for(i=0;i<10;i++)

{

System.out.println("为何我这么屌!"+i);

}//for

}

}

 

 

for循环的执行顺序

 

 

 

4.3.2 while 语句

while循环

while(循环条件)

{

语句; //循环体

}

 

☆思考题

while打印10句“我为何如此狂拽吊炸天!”

 

☆代码

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-3

功能:用while语句,打印十句“为何我这么屌”

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

int i;

i=0;

while(i<10)

{

System.out.println("为何我如此狂拽吊炸天"+i);

i++;

}//while

}

}

 

 

 

while语句执行顺序

 

 


4.3.3 do while语句

do while循环

do{

语句; //循环体

}while(循环条件);

注意:

do while循环是先执行,再判断

 

☆思考题

do while打印10句“我为何如此狂拽吊炸天!”

 

☆代码

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-3

功能:用do while语句,打印十句“为何我这么屌”

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

int i;

i=0;

do{

System.out.println("为何我如此狂拽吊炸天"+i);

i++;

}while(i<10);

 

}

}

 

 

do while语句执行顺序

 

 

 


4.3.4打印金字塔

☆思考题

根据前面学习到的三种语句,考虑如何打印出一个金字塔出来

 

 

☆分析

1、因为一下子打印出这样一个等边三角形金字塔比较难,不如换一种思考方式,先打印出一个直角三角形,如下图:

 

 

 

2、我们可以继续把问题简化,先模拟电脑实现打印:

*

**

***

****

现在就比较明白要怎么打印了。

3、首先要从上至下打印4行,然后每打印多一行的时候,*要打印多一个

4、可以清晰地知道这是需要两个循环来实现,暂时就用for语句

5、首先第一个循环,先控制打印4

for(int i=0;i<4;i++)

{

}

6、然后在第一个循环里面嵌套另一个循环,每一行要打印的*数目为行数(即j<=i

for(int i=0;i<=4;i++)

{

//每一行打印的*的数目等于行数

for(int j=0;j<i;j++)

{

System.out.print(“*”);

}//for j

//换行

System.out.println();

}//for i

 

☆代码

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-3

功能:打印直角三角形

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

for(int i=0;i<=4;i++){

for(int j=0;j<i;j++)

{

System.out.print("*");

}//for j

System.out.println();

}//for i

}

}

 

 

注意:当i=0时,第一次循环照样会打出一个换行。所以如果要打印4*,就要循环5次。要将条件改为i<=4

 

 

☆打印金字塔

 

分析

   *

  ***

 *****

*******

1、首先以打印4层为研究对象

2、从图中看出,每一行的开头需要打印(4 - 行数)个空格,然后后面加一些*

3、*的数量可以看出是有规律的,分别是1 3 5 7 ,显示这是个等差数列

4、根据等差数列公式 an = a1 + (n-1)*d ,其中an*的数量,a1 = 1n为行数,d2

5、所以每一行要打印的规律是:先打印(4 - 行数)个控制 1 + (行数 - 1*2)个*

 

代码 

 

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-3

功能:打印三角形

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

for(int i=1;i<=4;i++){

//先打印(4-i)个空格

for(int j=1;j<=(4-i);j++)

{

System.out.print(" ");

}//for j

//打印等差数列的*

for(int k=1;k<=(1+(i-1)*2);k++)

{

System.out.print("*");

}//for k

System.out.println();

}//for i

}

}

 

 


4.3.5打印中空的金字塔

 

要打印出这样的金字塔出来,就要继续找不一样的逻辑关系了。

 

☆简化问题

先打印这个图形

1*

2* *

3*   *

4*******

 

☆分析

1、可以看出前三行的打印规律基本如下:

星号+(1+(行数-2)*2)*空格+星号

 

2、最后一行则是:

(1+(行数-1)*2)个星号

 

☆代码

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-3

功能:打印中空三角形

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

for(int i=1;i<=4;i++){

//打印前三行

if(i<=3)

{

//先在前面打印一个*

System.out.print("*");

//打印(1+(行数-2)*2)*空格

for(int j=1;j<=(1+(i-2)*2);j++)

{

System.out.print(" ");

}

//第一行不需要打印

if(i!=1)

{

//在后面再打印一个*

System.out.print("*");

}

}//if 3

//打印最后一行

if(i==4)

{

//打印*

for(int k=1;k<=(1+(i-1)*2);k++)

{

System.out.print("*");

}

}//if 4

System.out.println();

}//for i

}

}

 

 

 

 

☆还原问题

1:   *

2:  * *

3: *   *

4*******

 

☆分析

要在上面的基础上,每一行的前面增加打印(4 - 行数)个空格

1、可以看出前三行的打印规律基本如下:

4 - 行数)*空格+星号+(1+(行数-2)*2)*空格+星号

 

2、最后一行则是:

(1+(行数-1)*2)个星号

 

☆代码

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-3

功能:打印中空三角形

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

for(int i=1;i<=4;i++){

//打印前三行

if(i<=3)

{

//打印(4-行数)*空格

for(int d=1;d<=(4-i);d++)

{

System.out.print(" ");

}

//先在前面打印一个*

System.out.print("*");

//打印(1+(行数-2)*2)*空格

for(int j=1;j<=(1+(i-2)*2);j++)

{

System.out.print(" ");

}

//第一行不需要打印

if(i!=1)

{

//在后面再打印一个*

System.out.print("*");

}

}//if 3

//打印最后一行

if(i==4)

{

//打印*

for(int k=1;k<=(1+(i-1)*2);k++)

{

System.out.print("*");

}

}//if 4

System.out.println();

}//for i

}

}

 

 

 


☆优化性能

可以从上面代码看出,整个代码打印前3行就用了3个循环,打印最后一行又用了1个循环,总共4个循环。只要减少循环的次数,就可以优化性能。

 

☆分析

在打印实心金字塔的时候,才用了2个循环,所以可以在里面做文章。

for(int i=1;i<=4;i++)

{

//先打印(4-i)个空格

for(int j=1;j<=(4-i);j++)

{

System.out.print(" ");

}//for j

//打印等差数列的*

for(int k=1;k<=(1+(i-1)*2);k++)

{

System.out.print("*");

}//for k

System.out.println();

}//for i

1、可以在for k循环中进行if语句控制

2、如果行数为1(开头一行)或者4(最后一行)照常打印

3、如果不是,则只需要打印开头的*或者结尾的*,中间打印空格

 

☆代码

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-3

功能:打印三角形

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

for(int i=1;i<=4;i++){

//先打印(4-i)个空格

for(int j=1;j<=(4-i);j++)

{

System.out.print(" ");

}//for j

//打印等差数列的*

for(int k=1;k<=(1+(i-1)*2);k++)

{

//如果行数为1(开头一行)或者4(最后一行)照常打印

if(i==1||i==4)

{

System.out.print("*");

}else

{//如果不是,则只需要打印开头的*或者结尾的*,中间打印空格

if(k==1||k==(1+(i-1)*2))

{

System.out.print("*");

}else

{

System.out.print(" ");

}//if k 

}//if i

}//for k

System.out.println();

}//for i

}

}

 

 

 


4.3.6打印中空的菱形

 

☆简化

先打印实心的菱形,再通过控制语句,打印中空的菱形

 

☆分析

 

 

1、可以看出前3行打印的金字塔,后面两行打印的是2行的倒三角

2、可以看出菱形的行数都是奇数,只要打印到中间那行就开始打印倒三角。

中间行=(行数/2+1

3、所以需要两个循环进行控制,第一个循环打印金字塔,当行数为中间行时,打印倒三角。

4、难点在于打倒三角:

 

可以从4行倒三角进行找每一行打印的规律:

 

0 1 2 3 空格 (行数-1)*空格

 

7 5 3 1 * (9-2*行数)*空格

 

☆代码

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-4

功能:打印五行菱形

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

//求出中间行

int middle = ((int)(5/2)+1);

for(int i=1;i<=6;i++){

//当行数大于等于中间行前,打印金字塔

if(i<=middle)

{

//先打印(4-i)个空格

for(int j=1;j<=(4-i);j++)

{

System.out.print(" ");

}//for j

//打印等差数列的*

for(int k=1;k<=(1+(i-1)*2);k++)

{

System.out.print("*");

}//for k

System.out.println();

}//打印金字塔

//打印倒三角

//从中间行下面开始打印

if(i>=middle)

{

//打印(i-1)*空格

for(int j=1;j<=(i-1);j++)

{

System.out.print(" ");

}//for j

//打印(9-2i)*星号

for(int k=1;k<=(9-2*i);k++)

{

System.out.print("*");

}//for k

System.out.println();

}//if

}//for i

}

}

 

 

☆打印中空菱形

将打空格的条件加上,通过if语句进行控制,打印出中空菱形

 

☆分析

1、只要在打印*的部分通过if语句进行控制即可

2、当行数为第一行或者最后一行,照常打印

3、其他情况只打印开头第一个*和最后一个*,中间打印空格

 

☆代码

/*

 ***********************************************************************

作者:李俊挥

日期:2013-12-4

功能:打印中空的五行菱形

 ***********************************************************************

*/

 

 

public class Demo

{

public static void main(String []args)

{

//求出中间行

int middle = ((int)(5/2)+1);

for(int i=1;i<=6;i++){

 

//当行数大于等于中间行前,打印金字塔

if(i<=middle)

{

//先打印(4-i)个空格

for(int j=1;j<=(4-i);j++)

{

System.out.print(" ");

}//for j

//打印等差数列的*

for(int k=1;k<=(1+(i-1)*2);k++)

{

//当行数为第一行,照常打印

if(i==1)

{

System.out.print("*");

}else

{

//其他行只打印开头第一个*和最后一个*

if(k==1||k==(1+(i-1)*2))

{

System.out.print("*");

}else

{

System.out.print(" ");

}

}

}//for k

System.out.println();

}//打印金字塔

//打印倒三角

//从中间行下面开始打印

if(i>=middle)

{

//打印(i-1)*空格

for(int j=1;j<=(i-1);j++)

{

System.out.print(" ");

}//for j

//打印(9-2i)*星号

for(int k=1;k<=(9-2*i);k++)

{

//当行数为最后一行,照常打印

if(i==6)

{

System.out.print("*");

}else

{

if(k==1||k==(9-2*i))

{

System.out.print("*");

}else

{

System.out.print(" ");

}

}

}//for k

System.out.println();

}//if

}//for i

}

}

 

[《think in java》学习——流程控制]标签和循环结合使用

package com.condition.label; /** * @author Administrator 测试循环中标签的作用 */ public class ConditionLabe...
  • gaofuqi
  • gaofuqi
  • 2014年04月01日 08:47
  • 494

java重修之路(四)程序流程控制:判断,选择,循环结构,函数

程序流程控制:判断,选择,循环结构判断结构这里有一点需要特别注意: public class Hello { public static void main(String[] args) { ...

Java流程控制的陷阱——for循环和foreach循环的陷阱

5、for循环的陷阱 5、1 分号的问题 public class SemicolonRight { public static void main(String[] args) { for (...

JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)

Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句) 本博文将对JAVA中组成各种结构的控制语句进行重点介绍,主要内容是区别于C/C++中的流程控制语句的重点解...

程序流程控制——循环结构

循环结构 代表语句:while,   do  while  ,   for while:     while(条件表达式) {             执行语句; } 例: class  Dem...

C语言5种程序语句(1)——流程控制语句中的结构化语句(条件语句和循环语句)

C语言有5种类型的语句: (1)表达式语句包括:运算符表达式语句、赋值语句。 (2)流程控制语句包括结构化语句和非结构语句; A.结构化语句包括:条件语句和循环语句;    a.条件语句包括:if语...

java基础教程:循环流程控制(11)

本节课是java的循环流程控制。主要是break,continue,return。快上车!!!

java初学之流程控制中的循环结构

循环结构 循环结构中有三种常用的循环:while循环,do while循环和for循环. 1.while循环: while循环的结构形式:while(①循环判断条件){ ②循环语句体}. wh...

JAVA基础之流程控制语句:循环结构

循环结构的第一种格式 while(条件表达式) 关键词 while { 执行语句; } 举例,比如:*/ int a=1; while (a //结果为true才执行。这里不能有...

3.Java语句的执行结构,分支语句,循环语句,特殊流程控制语句

一、Java语句的执行结构 1.顺序语句 按照顺序从上往下依次执行的语句,中间没有任何的判断和跳转 2.分支语句 根据不同的条件来产生不同的分支 if语句、switch语句 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:四、java流程控制(三)——循环控制
举报原因:
原因补充:

(最多只允许输入30个字)