Cha_03 控制语句


typora-copy-images-to: 笔记中有关截图
仅作为Java学习过程中知识点的记录


目录

待更新。。。


Cha_03 控制语句

3.1 选择结构

3.1.1 if 语句(分支语句)

if 语句是分支语句,也叫条件语句。

1. 语法结构

(1)if 结构
if(布尔表达式){
    Java语句;
    Java语句;
}
(2)if-else 结构
if(布尔表达式){
    Java语句1;
}else{
    Java语句2;
}
//如果表达式值为true,执行语句1,否则实行语句2
(3)if-else if 结构
if(布尔表达式1){
    Java语句1;//当表达式1的值为true时,执行语句1;否则判断表达式2
}else if(布尔表达式2){
    Java语句2;//当表达式2的值为true时,执行语句2;否则判断表达式3
}else if(布尔表达式3){
    Java语句3;//当表达式3的值为true时,执行语句3;否则不执行
}
(3)if-else if-else 结构
if(布尔表达式1){
    Java语句1;//当表达式1的值为true时,执行语句1;否则判断表达式2
}else if(布尔表达式2){
    Java语句2;//当表达式2的值为true时,执行语句2;否则判断表达式3
}else if(布尔表达式3)
···
else{
    Java语句n;//当前面的表达式的值都为false时,执行语句n;
}
  • 当每个分支中的语句只有1条时,花括号“{ }”可以省略。
  • 控制语句和控制语句之间是可以嵌套的。

2. 代码示例

Activities at Lake LazyDays

你在Lake LazyDays度假村的工作是按照天气状况给客人提供活动建议。以下是一个活动列表:

temp >= 80: swimming;
60 <= temp < 80: tennis;
40 <= temp < 60: golf;
temp < 40: skiing.

1、编写一段程序,提示用户输入一个气温值,然后打印出适合该气温的活动。提示:使用if-else语句,并确保你的条件设定不必过于复杂。

2、修改程序,在temp>95或者temp < 20的情况下,打印“Visit our shops!"。提示:在条件表达式中使用布尔运算符。

import java.util.Scanner;

public class LazyDays{
    public static void main(String[] args){
        
        //创建一个Scanner对象scan,用以获取用户从键盘输入的数据
        Scanner scan = new Scanner(System.in);
        
        //声明一个int型变量temp
        int temp;
        
        while (scan.hasNextInt( )) {
        	
			//提示用户输入今日气温
			System.out.println("请输入今日气温:");
			
			//将用户输入的气温赋值给temp
			temp = scan.nextInt( );
			
			//用if语句判断当日气温,根据不同气温输出不同的游玩建议
			if (temp > 95 || temp < 20) {

				//当气温temp高于95或低于20时,输出"Visit our shoops!"
				System.out.println("Visit our shops!");

			} else if (temp >= 80) {

				//当温度temp不低于80时,输出"swimming"
				System.out.println("swimming");

			} else if (60 <= temp && temp < 80) {

				//若temp不低于60时,输出"tennis"
				System.out.println("tennis");

			} else if (40 <= temp && temp < 60) {

				//若temp不低于60时,输出"golf",否则输出"skiing"
				System.out.println("golf");

			} else {

				//若以上条件都不满足,输出"skiing"
				System.out.println("skiing");

			} 
			
		}
        
		scan.close( );
        
    }
}

3.1.2 switch 语句

1. 语法格式

switch (表达式){
    case 值1: 
        语句块1;
        break;//中断当前的switch语句
    //当表达式的值为值2或值3时,执行语句块2
    case 值2:
    case 值3:
        语句块2;
        break;
    case ···:
    //当以上case语句的值都与表达式的值不相等时,执行false语句
    default:
        语句块n;
}

注意:

(1)switch语句可以拥有多个case语句

(2)表达式的值可以是整型字符串型等(cahr、byte、int、short、boolean、String)或对应的包装类型;

(3)当表达式的值与case的值相等时,执行该case分支的语句块,并往下执行,直到遇到第一个break结束

(4)如果没有break语句,程序一直往下执行,直到出现第一个break结束,或着执行到default分支结束

(5)switch可以包含零个或一个default语句,一般default语句放在最后。

2. 代码示例

将学生的英文级别转换为中文等级分类:A为优秀,B和C为良好,D为及格,F为未通过,如果级别不再这个范围内将做超出范围提示。

import java.util.Scanner;

public class Grade {
	public static void main ( String [ ] args ) {

		// 创建一个Scanner对象scan,用以获取用户从键盘输入的数据
		Scanner scan = new Scanner(System.in);

		// 声明一个String型变量grade。
		String grade;

		while (scan.hasNext( )) {

			// 提示用户输入层级等级
			System.out.println("请输入你的成绩等级:");

			// 将输入的学生成绩的英文等级赋值给grade中
			grade = scan.next( );

			// 用switch语句,根据不同气温输出不同的游玩建议
			switch (grade) {
				case "A" :
					System.out.println("优秀");
					break;
				case "B" :
				case "C" :
					System.out.println("良好");
					break;
				case "D" :
					System.out.println("及格");
					break;
				case "F" :
					System.out.println("未通过");
					break;
				default :
					System.out.println("不在A~F范围中!");
			}

		}
		
		scan.close( );
		
	}
}

3.1.3 选择结构综合实例

1. 题目

Rock, Paper, Scissors

程序Rock.java是石头剪子布游戏的一个框架。将该程序保存至本地目录,按照提示补充程序语句。该程序允许用户输入一个项目,计算机随机产生一个项目,对两个项目对比,给出胜负结果。比如,程序可能以以下方式运行:

Cha_03  控制语句

用户可以输入R, P, S或者r, p, s来表示石头,布,剪刀三个项目。用户输入的项目保存在字符串变量中,以便于大小写的转换。

使用一个switch语句将一个随机整数转换为游戏中计算机给出的项目。

很多情况下程序需要生成一定范围内的一个随机数。Java类库中的Random类为程序员提供了这样的功能,能够同时生成一系列的随机数。以下变量声明Random类型的变量generator,并使用new操作符进行初始化:

Random generator = new Random();

generator对象能够生成整型或者浮点型的随机数字,需要使用到nextInt方法或者nextFloat方法。nextInt()返回一个任意的整型随机数字,而nextInt(n)返回一个在0至n-1之间的随机整数。nextFloat()和nextDouble()返回0至1之间的一个浮点数。

假设需要生成30至99之间的整数,可以采用以下的方法:

  • 使用nextInt():Math.abs(generator.nextInt())%70 + 30;
  • 使用nextInt(70): generator.nextInt(70)+30;
  • 使用nexFloat: (int)(generator.nextFloat()*70) + 30
    加30,表示从30开始,一直到99,着100个数里随机取值。随机数默认从0开始随机取值。

完成以下程序。该程序用于生成随机数字。注意需要把java.util.Random类导入程序。

2. 代码

import java.util.Scanner;
import java.util.Random;

public class Rock{
    public static void main(String[] args){
        
        //声明变量
        String personPlay;//表示用户输入的值
        String computerPlay = "";//表示计算机出的值
        int randomInt;//随机数
        
        //创建对象
        Scanner scan = new Scanner(System.in);
        Random random = new Random();
        
        //提示用户输入石头、剪刀或布
        System.out.print("Enter your play: (R, P or S): ");
        
        //开始游戏
        while(scan.hasNext()){
            
            personPlay = scan.next().toUpperCase();
            randomInt = random.nextInt(3);
            
            switch(randomInt){
                case 0:
                    computerPlay = "R"; 
                    break;
                case 1:
                    computerPlay = "S";
                    break;
                case 2:
                    computerPlay = "P";
                    break;
            }
            
            if(personPlay.equals(computerPlay)){
                
                System.out.println("It's a tie.");
                
            }else if(personPlay.equals("R")){
                
                if(computerPlay.equals("P")){
                    System.out.println("Paper covered stone.\n"
                    				+ "Compueter wins, you failed!");
                }else{
                    System.out.println("Rock crushes scissors.\n"
                    				+ "You win!");
                }
                
            }else if(personPlay.equals("S")){
                
                if(computerPlay.equals("R")){
                    System.out.println("Rock crushes scissors.\n"
                    				+ "Compueter wins, you failed!");
                }else{
                    System.out.println("Sissors cut paper.\n" 
                    				+ "You win!");
                }
                
            }else if(personPlay.equals("P")){
                 
                if(computerPlay.equals("S")){
                    System.out.println("Sissors cut paper.\n"
                    				+ "Compueter wins, you failed!");
                }else{
                    System.out.println("Paper covered stone.\n"
                    				+ "You win!");
                }
                
            }else if(personPlay.equals("E")){
            	
                //游戏结束
            	System.out.println("Game over! \n"
            					+ "Thank for playing!");
            	return;
            	
            }else {
            	//判断用户输错,提示重新输入正确字符
            	System.out.println("Error! Please enter: \"R\", \"S\" or \"P\".");
            
            }
            
            System.out.print("\nEnter your play: (R, P or S): ");
            
        }
        
        scan.close();
        
    }
}

3. 程序运行结果

Cha_03  控制语句


3.2 循环语句

3.2.1 while 循环

1. 语法格式

while(布尔表达式){
	语句块;
}

当满足while的循环条件时,执行while里的语句块。同样,只有一条语句时可以不加“{ }”,为方便阅读,建议加“{}”。

2. 代码示例

3.2.2 do-while 循环

1. 语法格式

do{
	语句块;
}while(循环条件);

注意:

  1. 无论是否满足while循环条件,先执行do 语句块,再判断表达式是否满足while条件。
  2. do-while循环,至少执行一次循环,当条件满足时,do-while循环与while循环的结构一样。
  3. do-while循环中,while后面有分号

程序陷阱:
double num = 1.0;
while(num!= 0.0){
System.out.println(num);
num -= 0.1;
}
注意:num为浮点类型变量,直接进行四则运算时会出现精度丢失的现象。所以以上程序会进入死循环。要解决这个问题可以给定一个偏差值。

2. 代码示例


程序运行结果示例:

3.2.3 for 循环

1. 语法格式

for(初始值;条件表达式;增值){
	语句块;
}

注意:

  1. 在for循环中,初始值只赋值一次;
  2. 当满足条件表达式时,执行语句块,并进行增值,然后重新判断是否满足for循环条件。

2. 代码示例

鸡兔同笼问题。一个笼子中有若干只兔子和鸡,共有10个头,32只脚,求兔和鸡的数量。

package ForTest;

public class ChookRabbit{
    public static void main(String[] args){
        
        int head = 10;
        int feet = 32;
        int sumRabbit;
        int sumChook;
        
        for(sumChook = 0; sumChook < 16; sumChook++){
            
        	//鸡兔的总数为10
            sumRabbit = head - sumChook;
            
            //鸡有两只脚,兔子有四只脚,共有32只脚
            if(sumRabbit * 4 + sumChook * 2 == feet){
                System.out.println("There are " + sumRabbit
                                  + " rabbits and " + sumChook
                                  + " chooks in the cage.");
            }
            
        }
        
    }
}

程序运行结果:
Cha_03  控制语句

3.2.4 for-each 循环

1. 语法格式

for(类型 变量: 数组或集合){
	语句块
}

注意:

(1)for-each 循环也称为“增强for循环”。是为了简化集合类、枚举和数组的迭代过程二提出的。
(2)关键字for后面的括号内有两个控制元素,之间用“ : ” 分隔。冒号前为变量及其类型,这里的变量也称为迭代器,在循环体内反复赋值;冒号后为需要遍历的数组或集合。要求,变量的类型需与需要遍历的数组或集合内的元素类型一致。

2. 代码示例


程序运行结果示例:

3.2.5 循环语句综合实例

1. 题目

Factorials
n的阶乘(n!)表示整数从1到n的乘积。比如,4!=123*4=24。另外,0!=1。阶乘不适用于负数。

1、编写一段程序,请用户输入一个非负整数,然后打印该整数的阶乘。请使用while循环语句编写程序。请考虑用户输入0的情况。

2、修改程序,检查用户是否输入非负整数。如果输入的负数,则提示用户输入非负整数,并请用户重新输入,直到用户输入非负整数为止。

2. 代码

import java.util.Scanner;

public class Factorials{
    public static void main(String[] args){
        
        Scanner scan = new Scanner(System.in);
        
        int n;
        int factories;
        
        System.out.println("Please enter a number:");
        
        while(scan.hasNext()){
        	
            n = scan.nextInt();
            factories = 1;
            
            if(n<0){
                
            	//负数没有阶层
                System.out.println("Error!");
                
            }else if(n == 0){
                
            	//0! = 1
                System.out.println(n + "! = 1");
                
            }else{
                
            	//输出格式 n! = 1 * 2 * ··· * n = ···
                System.out.print(n + "! = 1");
                
                for(int i = 1; i <= n; i++){
                    //计算阶层
                    factories *= i;
                    
                    if(i > 1){
                        System.out.print(" * " + i);
                    }
                    
                }
                
                //输出最终结果,并换行
                System.out.print(" = " + factories + "\n");
                
            }
            
            //提示用户输入数字
            System.out.println("Please enter a number:");
            
        }
        
        scan.close();
        
    }
}

3. 程序运行结果

Cha_03  控制语句


3.3 中断语句

Java中的中断语句包括:return、break和continue,都用于执行循环的结束

3.3.1 return 语句

return语句

3.3.2 break 语句

3.3.3 continue 语句

上一篇:在Java中计算在范围内的表达式 并输出结果表达次方


下一篇:入门---结构体浅解