流程控制语句
Java提供了一些流程控制语句,来控制程序的执行流程。
一.分支结构
1.if
If分支结判定
根据的果(真或假)决定执行某个分支的代码
lf分支的作用
lf分支有三种格式
//格式3:
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2;
}else if(条件表达式3){
语句体3;
}else {
语句体n+1;
}
package com.wjh.Scanner;
//1.导包操作(并不需要自己写,以后通过工具导入更方便)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的心跳频率:");
int rap=sc.nextInt();
if(rap >= 60 & rap <=100){
System.out.println("心跳正常");
}else{
System.out.println("需要进一步检查");
}
System.out.println("检查结束!");
System.out.println("-------------或者--------------");
System.out.println("请输入您的心跳频率:");
int rap2=sc.nextInt();
if(rap < 60 || rap > 100){
System.out.println("需要进一步检查");
}else{
System.out.println("心跳正常");
}
System.out.println("检查结束!");
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/35c85bf5c681363384781b2464339cfa.png)
2.switch
switch分支
●也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好。
执行流程:
①先执行表达式的值,拿着这个值去与case后的值进行匹配。
②匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支。
③如果case后的值都不匹配则执行default代码。
switch案例
周一:埋头苦干,解决bug
周五:今晚吃鸡
周二:请求大牛程序员帮忙
周六:与王婆介绍的小芳相亲
周三:今晚啤酒、龙虾、小烧烤
周日:郁郁寡欢、准备上班。
周四:主动帮助新来的女程序解决bug
switch(表达式){
case值1:
执行代码...;
break;
case值2:
执行代码...;
break;
case 值n-1:
执行代码...;
break;
default:
执行代码n;
}
package com.wjh.Scanner;
//1.导包操作(并不需要自己写,以后通过工具导入更方便)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("今天星期几:");
int day=sc.nextInt();
switch(day){
case 1:
System.out.println("埋头苦干,解决bug");
break;
case 2:
System.out.println("请求大牛程序员帮忙");
break;
case 3:
System.out.println("今晚啤酒、龙虾、小烧烤");
break;
case 4:
System.out.println("主动帮助新来的女程序解决bug");
break;
case 5:
System.out.println("今晚吃鸡");
break;
case 6:
System.out.println("与王婆介绍的小芳相亲");
break;
default:
System.out.println("郁郁寡欢、准备上班");
break;
}
}
}
3.switch使用的注意事项
switch分支注意事项:
①表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String,
不支持double.float、long。
②case给出的值不允许重复,且只能是字面量,不能是变量。
③不要忘记写break,否则会出现穿透现象。
4.switch的穿透性
switch的穿透性
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且
不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性。
传统写法:
package com.wjh.Scanner;
//1.导包操作(并不需要自己写,以后通过工具导入更方便)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入现在几月:");
int month=sc.nextInt();
switch(month){
case 1:
System.out.println("31");
break;
case 2:
System.out.println("28 and 29");
break;
case 3:
System.out.println("31");
break;
case 4:
System.out.println("30");
break;
case 5:
System.out.println("31");
break;
case 6:
System.out.println("30");
break;
case 7:
System.out.println("31");
break;
case 8:
System.out.println("31");
break;
case 9:
System.out.println("30");
break;
case 10:
System.out.println("31");
break;
case 11:
System.out.println("30");
break;
case 12:
System.out.println("31");
break;
default:
System.out.println("略略略");
break;
}
}
}
穿透性:
package com.wjh.Scanner;
//1.导包操作(并不需要自己写,以后通过工具导入更方便)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入现在几月:");
int month=sc.nextInt();
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("31");
break;
case 2:
System.out.println("28 or 29");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("30");
break;
default:
System.out.println("略略略");
break;
}
}
}
二.循环结构
for循环
for循环
控制一段代码反复执行很多次。
格式:
for(初始化语句;循环条件;迭代语句){
循环体语句(重复执行的代码);
}
package com.wjh.Scanner;
//1.导包操作(并不需要自己写,以后通过工具导入更方便)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
int i;
for (i = 0; i < 3; i++) {
System.out.println(i+".HelloWord");
/*
0.HelloWord
1.HelloWord
2.HelloWord
*/
}
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/3a020b295bc65b6188a163b139241933.png)
for循环案例1
求和
需求:求1-5之间的数据和,并把求和结果在控制台输出。
package com.wjh.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
int i;
int sum=0;
for(i=1;i<=5;i++){
System.out.println(i);
sum+=i;
}
System.out.println("1-5之间的和="+sum); //15
}
}
for循环案例2
求奇数和
需求:求1-10之间的奇数和,并把求和结果在控制台输出。
方法1:
package com.wjh.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
int i;
int sum=0;
for(i=1;i<=10;i++){
if (i%2!=0){ //判断i是否为奇数
System.out.println(i);
sum+=i;
}
}
System.out.println("1-10之间的奇数和="+sum); //25
}
}
方法2:
package com.wjh.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
int i;
int sum=0;
for(i=1;i<=10;i+=2){
System.out.println(i);
sum+=i;
}
System.out.println("1-10之间的奇数和="+sum);
}
}
for循环案例3
水仙花数
需求:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:
1.水仙花数是一个三位数
2.水仙花数的个位、十位、百位的数字立方和等于原数
分析:
①定义一个for循环从“100一直到999”。
②每次访问到数据后,提取该数据的:个位、十位、百位数字。
③使用if判断:个位、十位、百位的数字立方和是否等于原数,等于则输出该数据
153 370 371 407
package com.wjh.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
/*需求:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:
1.水仙花数是一个三位数
2.水仙花数的个位、十位、百位的数字立方和等于原数*/
int i = 0,gw,sw,bw;
int count = 0;
for(i=100;i<=999;i++){
gw = i%10; //获取个位
sw = i/10%10; //获取十位
bw = i/100; //获取百位
if(i==gw*gw*gw+sw*sw*sw+bw*bw*bw){
System.out.print(i);
/* 153 370 371 407*/
}
}
System.out.println("\n一共有"+j+"个"); //一共有4个
}
}
while循环
while 循环格式与执行流程
初始化语句;
while(循环条件){
循环体语句(被重复执行的代码);迭代语句;
}
package com.wjh.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
int i=0;
while(i<3){
System.out.println("HelloWord");
i++;
}
}
}
while循环案例
珠穆朗玛峰(世界最高峰8848.86米)
需求:
世界最高山峰是珠穆朗玛峰(8848.86米=8848860毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,折叠多少次,可以折成珠穆朗玛峰的高度。
思路:
这种不清楚要循环多少次的情况可以选择用while实现。
package com.wjh.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
/*世界最高山峰是珠穆朗玛峰(8848.86米=88488600毫米),
假如我有一张足够大的纸,它的厚度是0.1毫米。请问,
折叠多少次,可以折成珠穆朗玛峰的高度。*/
System.out.println("-----用while循环-----");
int z=1;
int count=0;
while(z<=88488600){
z=z*2;
count++;
}
System.out.println("次数是:"+count); //27
System.out.println("-----用for循环-----");
int z1;
int count2=0;
for(z1=1;z1<=88488600;){
z1*=2;
count2++;
}
System.out.println("次数是:"+count2); //27
}
}
do-while循环
do-while循环
先执行再判断循环条件。
初始化语句;do {
循环体语句;迭代语句;
} while(循环条件);
do-while循环的特点:一定会先执行一次循环体。
package com.wjh.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
System.out.println("-----用while循环-----");
int i=0;
do{
System.out.println("HelloWord");
i++;
}while(i<3);
}
}
三种循环的区别
for循环和while循环(先判断后执行)do...while(第一次先执行后判断)
for和 while的区别:
for循环和while循环的执行流程是一模一样的。
如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用。
package com.wjh.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// While循环中,控制循环的变量在循环后还可以继续使用。
int i=0;
while(i<5){
System.out.println(i+" 你好");
i++;
}
System.out.println(i);
//for循环中,控制循环的变量只在循环中可以使用。
for(int j=0;j<5;j++){
System.out.println(j+"你好");
}
System.out.println(j); //报错,原因:控制循环内定义的变量只在循环中可以使用
}
}
死循环
死循环
一直循环的执行下去,如果没有干预不会停止下来。
for(; ;) {
System.out.println( "Hello world" ) ;
}
//经典做法
while(true){
system.out.println( "Hello world" );
}
do {
system.out.println( "Hello world" ) ;
}while (true) ;
密码验证
需求:系统密码是520,请用户不断的输入密码验证,验证不对输出密码错误,验证成功输出欢迎进入系统,并停止程序。
package com.wjh.Scanner;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
/*需求:系统密码是520,请用户不断的输入密码验证,验证不对输出密码错误,
验证成功输出欢迎进入系统,并停止程序。*/
int password = 520;
System.out.println("请输入验证密码:");
int pass = sc.nextInt();
while (true) {
if (pass == password) {
System.out.println("密码正确");
System.out.println("欢迎进入系统");
break;
} else {
System.out.println("验证失败,密码输入错误,请重试!");
}
System.out.println("\n请输入验证密码:");
pass = sc.nextInt();
}
}
}
循环嵌套
循环嵌套
循环中又包含循环
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 5; j++) {
system.out.println("我爱你");
}
}
嵌套循环的特点
外部循环每循环一次,内部循环全部执行完一次。
需求:在控制台使用*打印出4行5列的矩形
*****
*****
*****
*****
package com.wjh.Scanner;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i,j;
for(i=0;i<4;i++){ //设置行
for(j=0;j<5;j++){ //设置列
System.out.print("*");
}
System.out.println();
/*
*****
*****
*****
*****
*/
}
}
}
三.跳转关键字:break、continue
跳转控制语句介绍
break :跳出并结束当前所在循环的执行。
continue:用于跳出当前循环的当次执行,进入下一次循环。
注意事项:
break :只能用于结束所在循环,或者结束所在switch分支的执行。
continue :只能在循环中进行使用。
package com.wjh.Scanner;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//理解break continue的作用。
for(int i=0;i<5;i++){
System.out.println("---每天起床---");
if(i == 2){
break; //不能跳出if,直接跳过if结束for循环
}
}
for(int j=1;j<=5;j++){
if(j == 2){
System.out.println(j+"不睡");
continue; //跳出当次循环
}
System.out.println(j+"睡觉");
}
}
}
四.案例技术:随机数Random类
1.Random的使用
Random随机数技术
作用:用于在程序中获取随机数的技术。
使用步骤:
①:导包:告诉程序去JDK的哪个包中找随机数技术
②:写一行代码代表得到随机数对象
③:调用随机数的功能获取O-9的随机数
注意:
nextInt(n)功能只能生成: 0至n-1之间的随机数,不包含n。
package com.wjh.Random;
import java.util.Random; //导包 下面输入Random,自动导包
import java.util.Scanner;
public class RandomDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random r = new Random(); //创建随机数对象
int a = r.nextInt(10); //在nextInt输入一个值自动生成bount:
// 意为0-输入的值的范围(不包括输入的值)
//即为0-9(不包括10)
System.out.println(a);
}
}
package com.wjh.Random;
import java.util.Random; //导包 下面输入Random,自动导包
import java.util.Scanner;
public class RandomDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random r = new Random(); //创建随机数对象
int a = r.nextInt(10); //在nextInt输入一个值自动生成bount:
// 意为0~输入的值的范围
// (不包括输入的值,因为已经达到从0开始到输入的值)
//即为0~9(不包括10)
System.out.println(a);
System.out.println("----随机数循环(快捷键Ctrl+alt+t)可快速生成循环体----");
for (int i=0;i<10;i++) {
int b = r.nextInt(10);
System.out.println(b);
}
}
}
Random生成随机数的特点
nextInt(n)功能只能生成:0 - (n-1)之间的随机数。
Random生成区间随机数的技巧:减加法。
例如:要生成1-10之间的随机数,程序怎么实现?
package com.wjh.Random;
import java.util.Random; //导包 下面输入Random,自动导包
import java.util.Scanner;
public class RandomDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random r = new Random(); //创建随机数对象
int date = r.nextInt(10)+1; //1~10 意为 -1,(0-9)+1
System.out.println(date);
System.out.println("---------------");
int date1 = r.nextInt(2)+8; //()
System.out.println(date1);
System.out.println("---------------");
//Random随机如何随机生成 65~91 之间的随机数
//即 65-91 => (0~26)+65
int date2 = r.nextInt(27)+25;
System.out.println(date2);
/*
可以这样理解:(bound:27)+65
=(0+65)~[(27-1)+65)]
所以 =65~91之间
*/
}
}
2.猜数字游戏
案例:猜数字游戏
需求:
随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。
分析:
①随机生成一个1-100之间的数据
无识别结果
②使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏。
package com.wjh.Random;
import java.util.Random; //导包 下面输入Random,自动导包
import java.util.Scanner;
public class RandomDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random r = new Random(); //创建随机数对象
//随机生成一个1-100之间的数据,提示用户猜测,
// 猜大提示过大,猜小提示过小,直到猜中结束游戏。
int num = r.nextInt(100)+1; //随机生成1-100之间的数字
//1-100 ===> (0~99)+1
System.out.println("请输入一个数字:");
int inputNum = sc.nextInt();
while(true){
if(inputNum > num){
System.out.println("猜错了,大了");
}else if(inputNum < num){
System.out.println("猜错了,小了");
}else if(inputNum == num){
System.out.println("恭喜你,猜对了");
break;
}
System.out.println("请再猜数字:");
inputNum = sc.nextInt(); //游戏结束,跳出循环
}
}
}