三. 流程控制

三. 流程控制

  • 概述

  • 控制代码的执行的流程。

  • 分类:

    • 顺序执行

    • 分支选择

    • 循环

3.1 流程控制-分支选择

3.1.1 if - 嵌套if
  • class TestIf{

    public static void main(String[] args){
    /*单分支 if语句:

     作用:控制一个分支代码是否被执行。
     
     语法:if(条件){if 分支代码}
     
     解释:
    if:java 的关键字,用来控制单分支条件的。
    (条件):条件 必须是一个 boolean 表达式。
    {需要执行的分支代码}:
    所有的合法的java代码都可以作为内容。

    执行过程:
    1:判断条件是否成立:true or false。
    2:如果 true,成立了,那么就执行分支。
    3:如果false,不成立,那么就不执行分支。

    注意:
    如果分支代码只有一条语句,那么可以省略大括号。多条语句,必须使用大括号。
    通过条件控制整个大括号中的内容是否被执行。
    */
    final int MIN = 0;
    final int MAX = 100;

    int num = (int)(Math.random()*(MAX-MIN)+MIN);

    System.out.println(num);

    if(num % 2 != 0)
    System.out.println("奇数");

    if(num % 2 == 0)
    System.out.println("偶数");

    //求三个数的最大值。
    int num1 = (int)(Math.random()*(MAX-MIN)+MIN);
    int num2 = (int)(Math.random()*(MAX-MIN)+MIN);
    int num3 = (int)(Math.random()*(MAX-MIN)+MIN);
    System.out.println("num1 = " +num1 + "\tnum2 = "+ num2+ "\tnum3 = "+ num3);
    int max = 0;
    if(num1 >= num2 && num1 >= num3){
    max = num1;
    }
    if(num2 >= num1 && num2 >= num3){
    max = num2;
    }
    if(num3 >= num1 && num3 >= num2){
    max = num3;
    }

    System.out.println("max = "+max);

    //升序输出三个随机数。
    if(num1 <= num2 && num2 <= num3){
    }
    }
    }
  •  

3.1.2 if-else

class TestIfElse{

public static void main(String[] args){
/*
if- else:
双分支的流程控制语句。
语法:
if(条件){
//if 分支代码
}else{
//else 分支。
}
if else 都是 关键字。

执行过程:
1:计算if 条件。
2:条件是true:执行 if 分支。不执行esle 分支。
3:false,那么就跳过if 分支,直接执行esle 分支。

特点:
1:执行且必须执行其中的一个分支。互斥的。
2:else 不能单独存在。必须和if 配对。
3:2个分支代码,如果只有一条语句,可以省略大括号。

使用的场景:问题只有两种可能。
*/

//随机得到一个大写的字符。
final int MIN_CHAR = 'A';
final int MAX_CHAR = 'Z'+1;

boolean isUpperCase = true;
//大写的。
char ranChar = (char)(Math.random()*(MAX_CHAR-MIN_CHAR)+MIN_CHAR);
//50% 切换成小写。
if(Math.random()>0.5){
ranChar += 32;
isUpperCase = false;
}

System.out.println(ranChar);

if(isUpperCase){
ranChar += 32;
}else{
ranChar -= 32;
}
System.out.println("转换后:"+ranChar);

//判断一个随机数 奇数 偶数。
final int MIN = 0;
final int MAX = 100;

int ran = (int )(Math.random()*(MAX-MIN)+MIN);
if(ran % 2 == 0){
System.out.println(ran + "偶数");
}else{
System.out.println(ran + "奇数");
}
}
}

 

3.1.3 if-else if...else

class TestIfElseIf{

public static void main(String[] args){
/*
多分支:if-else if ... else

语法:
if(条件1){
分支1
}else if(条件2){
...分支2
}else if(条件n){
分支3
}else{
分支n
}

执行过程:
1:先判断条件1. 成立,执行 对应的分支。后面的都被跳过。
2:条件不成立,判断下一个条件。依次类推。
3:如果所有的条件都没有成立,那么就执行最后的else 分支。


使用的场景:
1:多分支选择的场景。
2:只能执行其中的一个分支。

注意:
1:如果多分支,最后有else。那么必须有一个分支会被执行。
2:最后的else 不是必须要有的。如果没有else,那么可能一个分支都不被执行。
3:每个else 必须和一个if 配对。else 的数量小于等于 if。
*/

final int MIN = 0;
final int MAX = 101;

int score = (int)(Math.random()*(MAX-MIN)+MIN);
System.out.println("score = " + score);

char ch;
if(score >=90){
ch = 'A';
}else if(score >= 80){
ch = 'B';
}else if(score >= 70){
ch = 'C';
}else if(score >= 60){
ch = 'D';
}else{
ch = 'E';
}
System.out.println("分数评级 = " + ch);

//打印人的一个上学的状态。
final int MAX_AGE = 30;
final int MIN_AGE = 0;

int age = (int)(Math.random()*(MAX_AGE-MIN_AGE)+MIN_AGE);

System.out.println("age = " + age);

if(age>=3 && age<6){
System.out.println("幼儿园小朋友!");
}else if(age>=6 && age <= 11){
System.out.println("小学生!");
}else if(age>=12 && age <= 14){
System.out.println("初中生!");
}else if(age>=15 && age <= 17){
System.out.println("高中生!");
}else if(age>=18 && age <= 21){
System.out.println("大学生!");
}
}
}
3.1.4 switch
  • case 穿透


  • class TestSwitch{

    public static void main(String[] args){
    /*
    多分支选择:switch

    switch:开关
    case:条件,箱子。
    break:打断
    default:默认的

    语法:
    switch(变量表达式){
    case 常量表达式1:
    分支代码1
    [break;]
    case 常量表达式2:
    分支代码3
    break;
    ....
    case 常量表达式n:
    分支代码n
    break;
    default:
    分支代码..
    break;
    }

    解释:
    1:变量表达式,必须包含至少一个变量的表达式。
    2:变量表达式 返回值的类型有要求:
    byte、short int char String enum。
    3:case 后跟必须是常量表达式。不能包含变量。必须是一个固定的值。
    表达式的返回值类型 必须和 switch 后的返回值兼容。byte、short int char String enum。

    执行过程:
    1:计算变量表达式的返回值。
    2:使用该返回值和后面每个case 后的值进行等值比较(比较是否相等)。如果相等了,那么就执行对应的分支。遇到break 结束switch。
    3:如果所有的分支都不相等,那么就执行最后的default 分支代码。

    注意:
    1:每个case 后的值必须不同。
    2:break 是可选的。如果一个case 后没有break。那么它后面的case 会被穿透,会被当做普通的代码执行。直到遇到break 结束switch。
    3: 最后的default 可以没有。如果没有,那么可能一个分支都不执行。

    if-else 多分支 和 switch 的区别:
    1:switch case 有数据类型的限制。
    2:switch case 只能进行等值判断。不能进行不等值判断。
    3:if-else 多分支可以进行不等值和等值比较,数据类型没有限制。
    总结:
    switch case 结构能实现的功能,if-else if 一定可以的。,反之不可以。
    */

    final int MIN = 0;
    final int MAX = 101;

    int score = (int)(Math.random()*(MAX-MIN)+MIN);
    System.out.println("score = " + score);

    char ch;
    score /= 10;
    switch(score){
    //多个case 执行同一个分支的写法。
    case 10:case 9:
    ch = 'A';
    break;
    case 8:
    ch = 'B';
    break;
    case 7:
    ch = 'C';
    break;
    case 6:
    ch = 'D';
    break;
    default:
    ch = 'E';
    break;
    }
    System.out.println("分数评级 = " + ch);
    }
    }

3.2 流程控制 - 循环

  • loop

  • 如果需要反复的执行某些代码。

3.2.1 循环的分类
  • while

  • do-while(了解)

  • for

3.2.2 while
  • class TestWhile{

    public static void main(String[] args){
    /*
    while 循环:
    语法:
    while(条件);{
    //循环体
    }

    解释:
    1:while 关键字。
    2:循环条件:boolean 表达式。
    3:循环体:需要反复执行的代码。

    执行过程:
    1:判断条件,如果是true,那么就执行循环体。执行完循环体,继续判断循环条件。
    2:依次类推,直到循环条件为false,立即结束循环。

    注意:
    1:如果循环体只有一句代码,可以省略大括号。
    2:不要在循环条件后添加分号,如果添加了,那么分号就作为了循环体。
    */

    //100个helloworld。
    //计数器。
    int counter = 0;
    while(counter < 10){
    System.out.println("hello world!--" + ++counter);
    }

    //1--100的累加和。
    int sum = 0;//累加和
    int num = 1;

    while(num <= 100){
    sum = sum + num;
    num ++;
    }
    System.out.println("sum = " + sum);//5050

    //1--100的偶数的累加和。
    sum = 0;
    num = 2;
    while(num <= 100){
    sum = sum + num;
    num += 2;
    }
    System.out.println("sum = " + sum);//2550

    //1--100的奇数的累加和。
    sum = 0;
    num = 1;
    while(num < 100){
    if(num % 2 != 0){
    sum = sum + num;
    }
    num ++;
    }
    System.out.println("sum = " + sum);//2500

    //今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
    final int COUNT = 35;
    final int FOOTS_COUNT = 94;
    int chickenCount = 0;
    int rabbitCount = COUNT-chickenCount;

    while(chickenCount <= COUNT){
    //求兔子的数量
    rabbitCount = COUNT-chickenCount;

    //判断是否满足条件。
    if(chickenCount * 2 + (rabbitCount << 2) == FOOTS_COUNT){
    System.out.println("兔子的数量:"+rabbitCount + "\t公鸡的数量:"+chickenCount);
    }

    chickenCount++;
    }
    //小刚带着100钱去买水喝。一瓶水2元,退一个空瓶子1元,退一个空瓶盖5毛,问可以买多少瓶水。
    double money = 100;
    final int WATER_PRICE = 2;
    final int ENPTY_PRICE = 1;
    final double BOTTLE_COVER = 0.5;

    counter = 0;
    while(money >= WATER_PRICE){
    //买水
    money -= WATER_PRICE;

    //喝水
    counter ++;

    //退瓶
    money += ENPTY_PRICE;

    //退瓶盖
    money += BOTTLE_COVER;
    }

    System.out.println("counter = " + counter + "\tmoney = " + money);

    //要求使用随机数,使用循环,得到一个5和7的公倍数。
    final int MIN = 1;
    final int MAX = 100;

    int ran = (int)(Math.random()*(MAX-MIN)+MIN);

    while(ran % 5 != 0 || ran % 7 != 0){//ran 不是 5和 7 的公倍数。
    ran = (int)(Math.random()*(MAX-MIN)+MIN);
    }

    System.out.println(ran);
    ran = (int)(Math.random()*(MAX-MIN)+MIN);

    while(!(ran % 5 == 0 && ran % 7 ==0)){//ran 不是 5和 7 的公倍数。
    ran = (int)(Math.random()*(MAX-MIN)+MIN);
    }

    System.out.println(ran);
    }
    }
3.2.3 循环的构成
  • 循环条件初始化部分。

  • 循环条件。

  • 循环体。

  • 迭代 a++;

3.2.4 do-while

  • class TestDoWhile{

    public static void main(String[] args){
    /*
    do-while 循环。

    语法:
    do{
    //循环体。
    }while(条件);

    执行过程:
    1:直接执行循环体,然后再做条件的判断。
    2:条件成立,执行循环体,然后再判断,依次类推,直到条件为false。结束循环。

    注意:
    1:do while 最后需要使用 ; 结尾。
    */

    //1-100的累加和。
    int sum = 0;
    int num = 1;
    do{
    sum += num;
    num ++;
    }while(num <= 100);
    System.out.println("sum = " + sum);

    //随机获取一个5和7的公倍数。
    final int MIN = 1;
    final int MAX = 100;

    int ran;
    do{
    ran = (int)(Math.random()*(MAX-MIN)+MIN);
    }while(ran % 5 !=0 || ran % 7 != 0);
    System.out.println("ran = " + ran);
    }
    }
3.2.5 for
3.2.6 break 和 continue

class TestBreak{

public static void main(String[] args){
/*
break:
1: java 关键字。
2:在switch 中使用break; 用来结束switch 语句.
3: break 还可以在循环体中使用, break; 用来结束循环。

注意:尽量使用循环条件结束循环,不要过于依赖break。
*/

//要求使用随机数,使用循环,得到一个5和7的公倍数。
final int MIN = 1;
final int MAX = 100;

int ran = (int)(Math.random()*(MAX-MIN)+MIN);

while(true){//ran 不是 5和 7 的公倍数。
ran = (int)(Math.random()*(MAX-MIN)+MIN);

if(ran % 5==0 && ran % 7 ==0)
break;
}
System.out.println(ran);

int sum = 0;
for(int i=1;;i++){
sum += i;
if(i==100)
break;
}
System.out.println(sum);
}
}

class TestContinue{

public static void main(String[] args){
/*
continue:继续的意思。
1:java 的关键字。
2:continue 只能在循环体中使用。
3:作用:跳过本次循环,继续下次循环。

1:while 中执行到了continue。那么直接跳转到 while 的循环条件判断处去执行。
2:for 中执行到了continue。那么直接跳转到 迭代处去执行。
*/

//偶数的累加和。
int sum = 0;
for(int i=2;i<=100;i+=2){
sum += i;
}
System.out.println("sum = " + sum);

//奇数的累加和。
sum = 0;
for(int i=99;i>=1;i--){
if(i % 2 != 0){
sum += i;
}
}
System.out.println("sum = " + sum);

//使用continue 实现1-100的奇数的累加和。
sum = 0;
for(int i=1;i<100;i++){
if(i%2==0)
continue;
sum += i;
}
System.out.println("sum = " + sum);
}
}

3.3 石头剪刀布

//猜丁壳
import java.util.Scanner;
class Game{
	
	public static void main(String[] args){
		//功能:和电脑玩猜丁壳的游戏,五局三胜制。打印比赛的过程。输出最终的结果。
		//变量:
		int playerInput;
		int computerInput;
		
		int playerWinCount = 0;
		int computerWinCount = 0;
		
		int counter = 1;
		
		//常量
		final int STONE = 0;
		final int SCISSOR = 1;
		final int PAPER = 2;
		
		final int MAX_WIN_COUNT = 3;
		
		//创建扫描器对象。
		Scanner scan = new Scanner(System.in);
		
		
		while(playerWinCount <MAX_WIN_COUNT && computerWinCount < MAX_WIN_COUNT){
			System.out.println("***********************第【"+counter+"】局开始了***********************");
			//玩家输入一个
			System.out.println("请您选择手势:【0-->石头】【1-->剪刀】【2-->布】的值:");
			playerInput = scan.nextInt();
			
			//电脑随机一个。
			computerInput = (int)(Math.random()*(PAPER + 1 - STONE) + STONE);
			
			//打印玩家和电脑的选择的手势信息。
			switch(playerInput){
				case STONE:
					System.out.println("玩家选择的是:【石头】");
				break;
				case SCISSOR:
					System.out.println("玩家选择的是:【剪刀】");
				break;
				case PAPER:
					System.out.println("玩家选择的是:【布】");
				break;
			}
			
			if(computerInput == STONE){
				System.out.println("电脑选择的是:【石头】");
			}else if(computerInput == SCISSOR){
				System.out.println("电脑选择的是:【剪刀】");
			}else{
				System.out.println("电脑选择的是:【布】");
			}
			
			//比较
			switch(playerInput){
				case STONE://玩家石头。
					if(computerInput == STONE){
						//
						System.out.println("本局平局~~~~");
					}else if(computerInput == SCISSOR){
						System.out.println("本局【玩家】胜利了~~~~");
						playerWinCount ++;
					}else{
						System.out.println("本局【电脑】胜利了~~~~");
						computerWinCount ++;
					}
				break;
				case SCISSOR://玩家剪刀
					if(computerInput == STONE){
						//
						System.out.println("本局【电脑】胜利了~~~~");
						computerWinCount ++;
						
					}else if(computerInput == SCISSOR){
						System.out.println("本局平局~~~~");
						
					}else{
						System.out.println("本局【玩家】胜利了~~~~");
						playerWinCount ++;
					}
				break;
				case PAPER://玩家布
					if(computerInput == STONE){
						System.out.println("本局【玩家】胜利了~~~~");
						playerWinCount ++;
						//
					}else if(computerInput == SCISSOR){
						System.out.println("本局【电脑】胜利了~~~~");
						computerWinCount ++;
					}else{
						System.out.println("本局平局~~~~");
					}
				break;
			}
			
			//输出当前比分。
			System.out.println("【玩家】vs【电脑】\t\t 【"+playerWinCount+"】vs【"+computerWinCount+"】");
			
			System.out.println("***********************第【"+counter++ +"】局结束了***********************");
		}
		
		//输出比赛结果。
		if(playerWinCount == MAX_WIN_COUNT){
			System.out.println("【玩家】胜利了");
		}else{
			System.out.println("【电脑】胜利了");
		}
	}
}

3.4 嵌套循环

posted @   ITboy搬砖人  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示