目录
(二)“条件判断(选择)结构”代表“如果...则...”的逻辑。
(三)“循环结构”代表“如果...,则重复执行...”的逻辑。
一、控制语句
其分为三类:顺序,选择,循环。
(一)”顺序结构“代表“先执行a,再执行b”的逻辑。
(二)“条件判断(选择)结构”代表“如果...则...”的逻辑。
选择结构用于判断给定的条件,然后根据判断的结果来控制程序的流程。主要的条件判断结构有:if结构和switch结构。而if结构又可以分为if单分支结构、if-else双分支结构、if-else if-else多分支结构。
①if单分支结构
语法结构:
if(布尔表达式){
语句块;
}
判断为ture,则执行语句块,否则反之。
测试:
//测试if单分支结构的掷骰子游戏
int a = 1+(int)(Math.random()*6);//生成了[0,6]的随机整数
int b = 1+(int)(Math.random()*6);
int c = 1+(int)(Math.random()*6);
int count = a+b+c;
if(count>15){
System.out.println("手气不错!");
}
if(10<count && count<15){
System.out.println("手气一般!");
}
if(count<10){
System.out.println("手气不怎么样!");
}
System.out.println("第一个骰子:"+a+"第二个骰子:"+b+"第三个骰子:"+c+",
总共:"+count);
补充:Math.random()
函数返回一个浮点数, 伪随机数在范围从0 到小于1,也就是说,从 0(包括 0)往上,但是不包括 1(排除 1),然后您可以缩放到所需的范围。实现将初始种子选择到随机数生成算法;它不能被用户选择或重置。
②if-else双分支结构
语法结构:
if(布尔表达式){
语句块1;
}else{
语句块2;
}
当布尔表达式为真时,执行语句块1;否则,执行语句块2,即else部分。
测试:
//随机生成一个【0,4)区间的半径,并根据半径求圆的面积和周长
double r = 4 * Math.random();
//Math.row(r,2)求半径r的平方
double area = Math.PI*r*r;
double circle = 2*Math.PI*r;
System.out.println("半径为:"+r);
System.out.println("面积为:"+area);
System.out.println("周长为:"+circle);
//如果面积>=周长,则输出“面积大于等于周长”,否则输出“周长大于面积”
if (area >= circle){
System.out.println("周长大于等于周长");
}else{
System.out.println("周长等于面积");
}
③if-else if-else多分支结构
语法结构:
if(布尔表达式1){
语句块1;
}else if(布尔表达式2){
语句块2;
}......
else if(布尔表达式n){
语句块n;
}else{
语句块n+1;
}
当布尔表达式1为真时,执行语句块1;否则,判断布尔表达式2,当布尔表达式2为真时,执行语句块2;否则,继续判断布尔表达式3......;如果1~n个布尔表达式均判定为假时,则执行语句块n+1,也就是else部分。
//100以内的随机数以对应各年龄层的输出
int age = (int) (100*Math.random());
System.out.println("年龄是"+age+",属于");
if(age<15){
System.out.println("小孩,调皮!");
}else if (age<25){
System.out.println("年轻人,学习!");
}else if(age<45){
System.out.println("中年人,认真工作");
}else if(age<65){
System.out.println("中老年,多运动");
}else if (age<85){
System.out.println("老年人,注意身体");
}else{
System.out.println("大寿星,古来稀");
}
④switch多分支结构(多值情况)
语法结构:
switch(表达式){
case 值1:
语句序列1;
[break];
case 值2:
语句序列2;
[break];
... ... ... ...
default:
语句块;
[break]
}
switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果表达式的值与任一case值不匹配,则进入default语句(如果存在default语句的情况)。
根据表达式值的不同可以执行许多不同的操作。switch语句中case标签再JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串。
测试:
//grade表示年级
int grade = (int)(5*Math.random());
switch (grade) {
case 1:
System.out.println("一年级");
break;
case 2:
System.out.println("二年级");
break;
case 3:
System.out.println("三年级");
break;
default:
System.out.println("四年级,要毕业了");
break;
}
(三)“循环结构”代表“如果...,则重复执行...”的逻辑。
循环结构分为两大类:一是当型,二是直到型。
- 当型:当布尔表达式条件为true时,反复执行某语句,当布尔表达式的值为false时才停止循环,比如:while与for循环。
- 直到型:先执行某语句,再判断布尔表达式,如果为ture,再执行某语句,如此反复,直到布尔表达式条件为false时才停止循环,比如do-while循环。
①while循环
语法结构:
if(布尔表达式){
循环体;
}
在循环开始,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于后来的每一次额外的循环,都会在开始前重新计算一次。语句中应有使循环结束的语句,否则会出现无限循环———”死循环“。
测试:
//计算1+2+3+4+5
int a = 0, b=0;
while(a <= 5){
b += a;
a++;
}
System.out.println("合计:"+b);
②do-while:先执行一次再判断进入循环。
语法结构:
do{
循环体;
}while(布尔表达式);
③for循环
语法结构:
for(初始表达式;布尔表达式;迭代因子){
循环体;
}
for循环语句时支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环再第一次反复之前要进行初始化,即执行初始表达式;随后,对布尔表达式进行判定,若判定结果为ture,则执行循环体,否则,终止循环;最后再每一次反复的时候,进行某种形式的”步进“,即执行迭代因子。
- 初始化部分设置循环变量的初值。
- 条件判断部分为任意布尔表达式。
- 迭代因子控制循环变量的增减。
for循环在执行条件判定后,先执行的循环体部分,再执行步进。
测试:
//倒序打印1-100之间的数字
for(int a = 100;a>0;a--){
System.out.println(a);
}
//打印a-z字母
for (char b ='a';b>='a'&& b<='z';b++){
System.out.println(b);
}
二、嵌套循环
在一个循环语句内部再嵌套一个或多个循环,称为嵌套循环。while、do-while与for循环可以任意嵌套多层。
测试:
//打印9*9乘法表。
for (int y=1;y<=9;y++){
for (int x=1;x<=y;x++){
System.out.print(x+"x"+y+"="+(x*y)+"\t");
}
System.out.println();
}
//打印5*5方阵
for (int i=1;i<=5;i++){
for (int a=1;a<=5;a++){
System.out.print("*\t");
}
System.out.println();
}
//打印5*5*#方阵
for(int x=1;x<=5;x++){
for (int y=1;y<=5;y++) {
if ((x + y) % 2 == 0) {
System.out.print("*\t");
} else {
System.out.print("#\t");
}
}
System.out.println();
}