四、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

}

}

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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(条件表达式) {        ...

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

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

java学习笔记(七)流程控制之循环语句

流程控制之循环语句:

JAVA流程控制 循环结构

Java迭代语句 (循环)循环的作用是反复执行一段代码,直到不满足条件为止。循环语句一般分为一下四个部分: 初始化部分 循环条件 循环体 迭代部分 while循环 while(条件) ...

Java之学习笔记(8)-------------运算符和循环结构(流程控制)

这一块的内容比较枯燥,但要耐心看完,在细节中寻找突破   另外,既然讲到了流程控制,即循环判断语句,当然要添加一些吸引你眼球的东西了。   后半部分,我会添加排...

JAVA流程控制语句 循环 while for

在JAVA中可以用以下语句实现循环: 1 while语句 2 do while语句 3 for语句 根据判断循环结束的条件放置位置的不同分为:先验循环,后验循环while循环while是先验...

java成长之路(二)----流程控制及循环结构

一、流程控制 1.java中的流程控制语句: 顺序结构、分支结构、循环结构。 1)顺序结构: 执行时,按照代码的书写顺序执行。 2)分支结构: 根据特点的条件选择执行某一段代码,分支结...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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