四、java流程控制(三)——循环控制
2013-12-05 23:13
134 查看
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 = 1,n为行数,d为2
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的选择结构switch和循环结构for while do while以及流程控制语句break continue return
- java详解 --- 流程控制之循环结构
- java基础 流程控制和条件语句,循环语句
- JAVA——程序流程控制——循环语句——for循环(打印三角形)
- 4、java变量、函数、基本类型的值传递、分支、循环、流程控制
- 【慕课笔记】第四章 流程控制语句 第8节 JAVA循环语句之for
- Java基础语法(一)---数据、数值类型、运算符、程序流程控制语句和循环结构
- 黑马程序员——Java基础(流程控制语句、选择结构、循环结构、方法)
- Java之学习笔记(8)-------------运算符和循环结构(流程控制)
- 3.Java语句的执行结构,分支语句,循环语句,特殊流程控制语句
- Java初学(流程控制and循环)
- java基础--流程控制(循环结构)for循环
- 栋哥带你学Java流程控制之循环结构
- Java流程控制(流程、循环和结束循环)
- java中条件、循环、特殊流程控制语句
- 快读掌握JAVA流程控制的循环结构
- 【慕课笔记】第四章 流程控制语句 第9节 JAVA循环跳转语句之break
- JAVA流程控制 循环结构
- java 中几个特殊循环流程控制(break ,continue,label)
- JAVA基础——初识JAVA(五)(流程控制、分支语句、循环语句、特殊流程控制语句)