3.Java程序流程控制

1.流程控制语句

Java提供了一些流程控制语句,来控制程序的执行流程
顺序结构— 程序默认流程
分支结构—if、switch
循环结构—for、white、do…while

1.分支结构

1.if分支

根据判定的结构(真或假)决定执行某个分支的代码
if分支有三种格式

格式1
if(条件表达式) {
	语句体;
}

格式2
if(条件表达式) {
    语句体1
} else {
    语句体2
}

格式3
if(条件表达式1) {
    语句体1
} else if(条件表达式2){
    语句体2
} else if(条件表达式3) {
    语句体3
} 
...
else {
    语句体n
}
// 需求: 成绩高于 60为及格,否则挂科
int score = 70;
if(score>=60 && score<=100) {
    System.out.println("成绩合格");
}
// 需求:年龄大于18则成年,否则未成年
int age = 20;
if(age >=18) {
    System.out.println("您已成年");
} else {
    System.out.println("您还未成年");
}
// 需求:成绩高于80 A,成绩高于70 B ,成绩高于60 C,成绩低于60 D
int score2 = 40;
if (score2 > 0 && score2 < 60) {
    System.out.println("D");
} else if (score2 >= 60 && score2 < 70) {
    System.out.println("C");
} else if (score2 >= 70 && score2 < 80) {
    System.out.println("B");
} else if (score2 >= 80 && score2 <= 100) {
    System.out.println("C");
} else {
    System.out.println("录入的分数不正确");
}
2.switch分支

也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好

执行流程:

1.先执行表达式的值,拿着这个值去与case后的值进行匹配

2.匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支

3.如果case后的值都不匹配则执行default代码

swith(表达式) {
    case1:
        执行代码...;
    	break;
    case2: 
    	执行代码...;
    	break;
    ...
    case 值n-1: 
    	执行代码
}
String today = "周三";
switch (today){
    case "周一":
        System.out.println("上班摸鱼");
        break;
    case "周二":
        System.out.println("继续摸鱼");
        break;
    case "周三":
        System.out.println("请假");
        break;
    case "周四":
        System.out.println("等周末");
        break;
    case "周五":
        System.out.println("明天不上班");
        break;
    default:
        System.out.println("休假");
}

注意:

1.表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持doublle、float、long

2.case给出的值不允许重复,且只能是字面量,不能是变量

3.每个分支需以break结束,否则会出现case穿透

int a = 3;
switch (a) {
    case 3 :
        System.out.println("a=3");
    case 4:
        System.out.println("a=4"); // a = 3   a = 4
        break;
    default:
        return;
}

swich的穿透性

如果代码执行到没有写break的case块,执行完后直接进入下一个case块执行代码(而且不会进行任何匹配),直到break才跳出分支,这就是swich的穿透性

int month = 7;
switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        System.out.println(month+"月是31天");
        break;
    case 2:
        System.out.println(month+"月平年28天,闰年31天");
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        System.out.println(month+"月是30天");
        break;
    default:
        System.out.println("请输入正确的月份");
}

2.循环结构

1.for循环

控制一段代码反复执行多次

格式:

for(初始化语句;循环条件;迭代语句) {
    循环体语句(重复执行的代码)
}

势力

// 输出3次HelloWorld
for(int i = 0; i < 3; i++) {
    System.out.println("hello");
}
2.while循环

格式:

初始化语句:
 while(循环条件) {
     循环体语句(被重复执行的代码);
     迭代语句;
 }
int i =0;
while(i<3) {
    System.out.println("Hello World");
    i++;
}

注:不清楚循环多少次的情况可以选择用while实现

while能实现的for都能实现

3.do…while循环

先执行再判断循环条件

初始化语句;
do {
    循环体语句;
    迭代语句;
}while(循环条件)

do-while循环的特点:一定会先执行一次循环体

int i = 0;
do{
    System.out.println("hello World");
    i++;
} while(i<3);
4.区别

for循环和while循环(先判断后执行)

do…while(第一次先执行后判断)

for和while的区别

for循环和while循环的执行流程是一样的

如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环

for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用

5.死循环

一直循环的执行下去,如果没有干预不会停止下来

for(;;) {
    System.out.println("hello");
}
// 经典写法
while(true) {
     System.out.println("hello");
}
do {
     System.out.println("hello");
} while(true)
6.嵌套循环

循环中又包含循环

for (int i = 0;i<5;i++) {
    for(int j=0;j<3;j++) {
        System.out.println(j+"j");
    }
    System.out.println(i+"i");
}
7.跳转关键字

break: 跳出并结束当前所在循环的执行

continue:用于跳出当前循环的当次执行,进入下一次循环

注意:

break:只能用于结束所在循环,或者结束所在switch分支的执行
continue:只能在循环中进行使用
7.Random随机数

作用:用于在程序中获取随机数

1.导包

import java.util.Random;

2.写一行代码代表得到的随机数对象

Random r = new Random();

3.调用随机数的功能获取0-9的随机数

int number = r.nextInt(10)

注意:

nextInt(n)功能只能生成:0至n-1之间的随机数,不包含n

Random r = new Random();
// 调用nextInt方法可以返回一个整型的随机数
int data = r.nextInt(10);
System.out.println(data);

Random随机数如何生成65-91之间的随机数

65-91=>(0-26)+65
int number = r.nextInt(27)+65

2.案例

1.求和

需求:求1-5之间的数据和,并把求和结果在控制台输出

int sum = 0;
for (int i = 1; i <= 5; i++) {
    sum += i;
}
System.out.println(sum); // 15

2.求奇数和

需求:求1-10之间的奇数和,并把求和结果在控制台输出

int sum = 0;
for(int i =1; i <= 10; i++) {
    if(i % 2 == 1) {
        sum += i;
    }
}
System.out.println(sum); // 25

方法二

int sum1 = 0;
for (int i = 1; i <= 10; i += 2) {
    sum1 += i;
}
System.out.println(sum1);

3.水仙花数

需求:在控制台输出所有的“水仙花数”

1.水仙花是一个三位数

2.水仙花数的各位、十位、百位的数字立方合等于原数

int count = 0;
// 水仙花数
for(int i = 100; i <= 999; i++) {
    // 个位
    int ge = i % 10;
    // 十位
    int shi = i / 10 % 10;
    // 百位
    int bai = i / 100;
    if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
        count++;
        System.out.print(i+"\t");
    }
}
System.out.println("\n水仙花的个数是"+count);

4.珠穆朗玛峰

需求:世界最高峰是珠穆朗玛峰(8848.46米=8848860毫米),若用一张足够大的纸,它的厚度是0.1毫米,请问,折叠多少次,可以折成珠穆朗玛峰的高度

分析:

1.定义变量存储珠穆朗玛峰的高度、纸张的高度

2.使用while循环,循环条件是(纸张厚度<山峰高度),内部控制纸张折叠,每折叠一次,纸张厚度为原来的两倍,循环外定义计数变量,每折叠一次让变量加1

 // 珠穆朗玛峰
// 定义变量记录山峰的高度 纸张的厚度
double peakHeight = 8848860;
double paperThickness = 0.1;
int count = 0;
// 定义一个while循环控制纸张折叠
while (paperThickness < peakHeight) {
    paperThickness *= 2;
    count++;
}
System.out.println("折叠的次数"+count);
System.out.println("纸张最终的厚度"+paperThickness);

5.密码验证

需求:系统密码是123456,请用户不断的输入密码验证,验证不对输出密码错误,验证成功输出欢迎进入系统,并停止程序

 // 1.定义正确的密码
int okPwd = 123456;
// 2.定义死循环,不断的输入密码认证
Scanner sc = new Scanner(System.in);
while(true) {
    System.out.println("请输入正确的密码:");
    int pwd = sc.nextInt();
    // 判断密码是否正确
    if(pwd == okPwd) {
        System.out.println("登录成功");
        break;
    } else {
        System.out.println("密码错误");
    }
}

6. 循环嵌套

需求:在控制台使用*打印出4行5列的矩形

for(int i=0;i<4;i++) {
    for (int j =0;j<5;j++) {
        System.out.print("*");
    }
    System.out.println();
}

7.案例:猜数字游戏

需求:随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,知道猜中结束游戏

 // 随意一个1-100之间的数
Random r = new Random();
int luckNumber = r.nextInt(100)+1;
Scanner sr = new Scanner(System.in);
while (true) {
    System.out.println("请输入数据(1-100)");
    int guessNumber = sr.nextInt();
	// 判断是否猜中
    if(guessNumber>luckNumber){
        System.out.println("猜测的数据过大");
    }else if(guessNumber<luckNumber) {
        System.out.println("猜测的数据过小");
    }else {
        System.out.println("恭喜您猜中了");
        break;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值