2.6.3 循环结构
代表结构:while ,do while, for
分别对应的格式是:
while(条件表达式)
{
执行语句;
}
do
{
执行语句;
}while(条件表达式); //无论条件是否满足,循环体至少被执行一次
注:
1.ctr+c强制结束程序运行
2.语句结束,后面要么跟大括号,要么跟分号
3.E.g.
int y=1;
while (y<3); // y<3,满足。后面没有循环体,就会继续回来判断。程序就会停在这里不动。
//下面这些东西叫做内部的独立代码块
{
System.out.println(“y=”+y);
y++;
}
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
E.g.1:
for(int x=0;x<3;x++)
{
System.out.println(“x=”+x);
}
执行流程:
在内存中,分配一个int的空间。判断x<3吗?满足,立刻进去循环体,执行打印操作。此时执行循环后的表达式,再去判断条件是否满足。
所以,初始化表达式只执行一次。条件不满足,for循环结束。
E.g.2:
for(int x=0;x<3;x++)
{
System.out.println(“x=”+x);
}
System.out.println(“x======”+x);
程序报错,这表示变量有自己的作用域。for循环一结束,变量x就没有了!!
for和while可以互换。如果需要定义循环增量,用for更为合适。
总结:什么时候使用循环结构呢?
当要对某些语句执行很多次的时候,就使用循环结构。
D305 循环语句的其他特点
1.
class ForTest
{
public static void main(String[] args)
{
for(System.out.println(“a”);System.out.println(“b”);System.out.println(“c”)) //条件表达式不是真就是假。这里看不出来。报错
{
System.out.println("d");
}
}
}
所以条件表达式的结果,只能是true/false,其他的都不行
2.
class ForTest
{
public static void main(String[] args)
{ int x=1;
for(System.out.println(“a”);x<3;System.out.println(“c”))
{
System.out.println("d");
x++;
}
}
}
该程序结果就是:
a
d
c
d
c
稍微改一下实例2的程序:
class ForTest
{
public static void main(String[] args)
{ int x=1;
for(System.out.println(“a”);x<3;System.out.println(“c”),x++) //多个表达式用逗号隔开
{
System.out.println("d");
// x++;
}
}
}
3.格式改写的例子
for(y=0;y<3;y++)
{
}
还可以写成
y=0;
for(;y<3;) //for语句的初始化表达式可以不写,循环后的操作表达式也可以不写,但是这样的话就不如直接写while了
{
y++
}
4.无限循环的最简单表现形式有两种:
for(;;) //对for循环的条件表达式这一块,不写就默认为true
{
}
while(true){}
D306 for语句练习——累加&&计数器
1.获取1~0的和,并打印
class ForTest2
{
public static void main(String[] args)
{
int sum=0;//定义变量用于存储不断变化的和
int x=1; //定义变量,记录住不断变化的被加的数
//定义循环,重复做加法这一过程。
while(x<=10) //循环注意:一定要明确哪些语句需要参与循环,哪些不需要。
{
sum+=x;
x++;
}
System.out.println(“sum=”+sum);
}
用for循环来做:
class ForTest2
{
public static void main(String[] args)
{
sum=0;
for(x=1;x<=10;x++)
{
sum+=x;
}
System.out.println(“sum=”+sum);
}
}
/*
其实这就是累加思想。
原理:通过变量记录住每次变化的结果
通过循环的形式,进行累加动作
*/
2.1~100之间7的倍数的个数,并打印
/*
思路:
(1)先对1~100进行循环(遍历),通过循环的形式
(2)在遍历的过程中定义条件,只对7的倍数进行操作
步骤:
1.定义循环语句,选择for语句
2.在循环中定义一个判断,只要是7的倍数即可,使用if语句 条件:%7==0;
3.定义一个变量,专门放已经出现的7的倍数的个数
*/
int num=0;
for(x=1;x<=100;x++)
{
if(x%7==0)
{
num++;
}
}
System.out.println(“7的倍数的个数是:”+num);
/*
计数器思想。
原理:通过一个变量记录住数据的状态变化
也需要通过循环完成
*/
D307 for嵌套
//语句嵌套形式,其实就是语句中还有语句
//循环嵌套
for(x=0;x<3;x++)
{
for(y=0;y<4;y++)
{
System.out.println(“ok”); //程序最终会打印12个ok,也就是外循环乘以内循环(x=0、1、2;y=0、1、2、3)
}
}
稍微做一下改动:
for(int x=0;x<3;x++)//注意这里,第一个初始化表达式也需要说清楚,初始化的x的数据类型,否则会报错!!!
{
for(int y=0;y<4;y++)
{
System.out.println(“*”);
}
System.out.println(); //只有一个功能就是换行
}
/*
这时打印输出结果就是:
//(1)**
//(2)**
//(3)**
对于打印长方形,外循环控制行数,内循环控制列数,也就是每一行中的元素的个数
*/
Q:现在如果我们要打印
//*****
//****
//***
//**
//*
形如上图,怎么做呢?
思考:发现图像有好多行,每一行有很多列。所以要使用嵌套循环,形象说法:大圈套小圈。
public class test2
{
for(int x=0;x<5;x++) //x<5:外循环控制行,此时行数是固定的5行。
{
for(int y=x;y<5;y++) //这里y<的数不写常量,直接写
{
System.out.print("*"); //每一行的*的数目都在变化,所以是不是应该用一个变量记录
}
System.out.println();//换行
}
}
2018.5.28