Day05-选择结构分支结构与循环结构
Day05-选择结构分支结构与循环结构
程序的流程结构
- 顺序结构:从上往下,逐行执行
- 选择结构:条件满足,某些代码才会执行
- 循环结构:条件满足,某些代码会反复多次执行,直到条件不满足
选择结构
基本if选择结构
语法
if(布尔表达式){
//执行代码块
}
执行流程
- 对布尔表达式进行判断。
- 结果为true,则先执行代码块,再执行后续代码。
- 结果为false,则跳过代码块,直接执行后续代码。
举几个例子
//1、导包
import java.util.Scanner;
public class TestIf1{
public static void main(String[] args){
//如果java成绩大于90,奖励一个键盘
//2、创建Scanner
Scanner input = new Scanner(System.in);
System.out.println("请输入您的java成绩");
//3、用input接收double类型的值 nextDouble();
double score = input.nextDouble();
//4、判断
if(score > 90){
System.out.println("奖励一个键盘");
}
System.out.println("程序结束");
}
}
//1、导包
import java.util.Scanner;
public class TestIf2{
public static void main(String[] args){
/*java成绩大于98分,而且html成绩大于80分,老师奖励他;或者java成绩等于100分,Html成绩大于70分,老师也可以奖励他。*/
//2、创建Scanner
Scanner input = new Scanner(System.in);
//3、接收成绩
System.out.println("请输入您的java成绩");
double javaScore = input.nextDouble();
System.out.println("请输入您的html成绩");
double htmlScore = input.nextDouble();
//4、判断
if((javaScore > 98 && htmlScore > 80) || (javaScore == 100 && htmlScore > 70)){
System.out.println("奖励一个键盘");
}
System.out.println("程序结束");
}
}
if else选择结构
语法
if(布尔表达式){
//执行代码块1
}else{
//执行代码块2
}
执行流程
- 对布尔表达式进行判断。
- 结果为true,则先执行代码块1,再退出整个结构,执行后续代码。
- 结果为false,则先执行代码块2,再退出整个结构,执行后续代码。
举几个例子
//1、导包
import java.util.Scanner;
public class TestIfElse1{
public static void main(String[] args){
/*
如果体彩中了500万,我买车、买房、欧洲旅游,否则继续买
要求控制台输入是否中奖
字符串比较使用equals()方法
技术点if-else
值的比较
基本数据类型
等值判断 1 == 1 '是' == '是'
引用数据类型
等值判断(地址值)
字符串内容比较 equals()
*/
//2、创建Scanner
Scanner input = new Scanner(System.in);
//3、接收数据
System.out.println("请输入是否中奖");
/*
char answer = input.next().charAt(0);
//4、判断
if('是' == answer){
System.out.println("买车、买房、欧洲旅游");
}else{
System.out.println("继续买");
}
*/
String answer = input.next();
if ("是".equals(answer)) {
System.out.println("买车、买房、欧洲旅游");
} else {
System.out.println("继续买");
}
System.out.println("程序结束");
}
}
//1、导包
import java.util.Scanner;
public class TestIfElse2{
public static void main(String[] args){
/*
输入四位数字的会员号
百位数字等于产生的随机数字即为幸运会员
提示恭喜您中奖了,否则没中奖
*/
//2、创建Scanner
Scanner input = new Scanner(System.in);
//3、接收输入四位数字的会员号
int cardNo = input.nextInt();
//百位数字等于产生的随机数字即为幸运会员
int ge = cardNo % 10;
int shi = cardNo / 10 % 10;
int bai = cardNo /100 % 10;
int qian = cardNo /1000 % 10;
System.out.println("千位是"+qian+"百位是"+bai+"十位是"+shi+"个位是"+ge);
int random = (int)(Math.random()*10);
System.out.println("产生的随机数字为:"+random);
if(bai == random){
System.out.println("恭喜您中奖了");
}else{
System.out.println("没中奖");
}
}
多重if选择结构
语法
if(布尔表达式1){
//执行代码块1
}else if(布尔表达式2){
//执行代码块2
}else if(布尔表达式3){
//执行代码块3
}else{
//执行代码块4
}
执行流程
适用于区间,但要保证条件顺序
- 表达式1为true,则执行代码块1,再退出整个结构。
- 表达式2为true,则执行代码块2,再退出整个结构。
- 表达式3为true,则执行代码块3,再退出整个结构。
- 以上均为false,则执行代码块4,再退出整个结构。
举几个例子
//1、导包
import java.util.Scanner;
public class TestMultIf1{
public static void main(String[] args){
/*
某游戏对不同等级的积分的玩家赋予不同的荣誉称号,其对应关系如下:
积分>=10000分为钻石玩家
积分>=5000并且<10000为白金玩家
积分>=1000并且<5000为青铜玩家
积分<1000为普通玩家。
小编现在是有7200分,请在代码编辑器中完善代码,看一下小编是什么级别的玩家。
*/
//2、创建Scanner
Scanner input=new Scanner(System.in);
//3、接收数据
System.out.println("请输入小编的积分数:");
int score=input.nextInt();
//4、处理数据
/*
if(score>=10000){
System.out.println("钻石玩家");
}
if(score>=5000&&score<10000){//相当于5000<=score<10000
System.out.println("白金玩家");
}
*/
if(score>=10000){
System.out.println("钻石玩家");
}else if(score>=5000){//相当于在5000-10000之间,即5000<=score<10000
System.out.println("白金玩家");
}else if(score>=1000){
System.out.println("青铜玩家");
}else if(score<1000){
System.out.println("普通玩家");
}
System.out.println("程序结束");
}
}
嵌套if选择结构
语法
if(外层表达式){
if(内层表达式){
//内层代码块1
}else{
//内层代码块2
}
}else{
//外层代码块
}
执行流程
当外层条件满⾜时,再判断内层条件。
举几个例子
//1、导包
import java.util.Scanner;
public class TestNestIf{
public static void main(String [] args){
/*
判断用户输入的性别,如果是女生,
然后再输入年龄,如果年龄大于18则输出“女士你好,”,
否则输出“小姐姐你好”,
如果是男生,直接输出“帅哥你好”。
String比较内容是否相同使用.equals()
*/
//2、创建Scanner
Scanner input = new Scanner(System.in);
//3、接收数据
System.out.println("请输入您的性别:");
String sex = input.next();
//4、处理数据
if ("女".equals(sex)) {
System.out.println("请输入您的年龄");
int age = input.nextInt();
if (age > 18) {
System.out.println("女士你好");
} else {
System.out.println("小姐姐你好");
}
} else if ("男".equals(sex)) {
System.out.println("帅哥你好");
} else {
System.out.println("请慎重输入您的性别!!!");
}
System.out.println("程序结束");
}
}
注意
- if和else后面只有一条语句时,可以省略后面的{},但不建议这么写
- if else可以理解为如果...否则...
- else 总是与其前面最近的尚未配对的if结合
分支结构
switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
语法
switch(变量 | 表达式){
case 值1:
逻辑代码1;
break;
case 值2:
逻辑代码2;
break;
case 值n:
逻辑代码n;
break;
default:
未满⾜时的逻辑代码;
break;
}
执行流程
switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断
注意事项
1、可判断的类型: byte、short、int、char、String(JDK7+)
2、case穿透:
产生这种现象的原因:由于某个case语句中缺少或者漏写break语句所导致的结果
3、switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号
4、case 语句中的值的数据类型必须与变量的数据类型相同,case后面只能跟常量,不能跟变量
5、switch语句遇见break结束,或者程序默认执行到末尾结束
6、default可以在switch语句的任何位置,但建议在最后一个,default在末尾的时候它里面的break可以省略
举个例子
public class TestSwitch{
public static void main(String[] args){
/*
根据不同输入名次显示不同奖励
第一名:奖励 iphone
第二名:奖励 小米电视
第三名:奖励 自行车
否则:奖励 彩票
*/
//2、创建Scanner
Scanner input = new Scanner(System.in);
//3、接收数据
System.out.println("请输入名次:");
int num = input.nextInt();
//4、处理数据
switch(num){
case 1:
System.out.println("奖励iphone");
break;
case 2:
System.out.println("奖励小米电视");
break;
case 3:
System.out.println("奖励自行车");
break;
default:
System.out.println("奖励iphone");
break;//尽量加上break;若不加,放case1前,这句永远执行
}
System.out.println("程序结束");
}
}
if else也算是一种分支结构
循环结构
通过某个条件,重复的执行⼀段逻辑代码。
一个循环简单的由以下部分组成
初始条件:循环用以开始的数据
循环条件:决定循环是否继续的依据
循环操作:单次循环的逻辑代码或任务(一次循环要做的事情)
迭代部分:控制循环条件改变增量
while循环
语法
while(布尔表达式,循环的条件){
//逻辑代码(循环要做的事情)
}
执行流程
先对布尔表达式进行判断,结果为true,则执行逻辑代码。
本次执行完毕后,再次进行判断,结果仍旧为true,则再次执行逻辑代码。
直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。
特点
首次循环有条件,先判断,再执行。
举几个例子
public class TestWhile1{
public static void main(String[] args){
int i = 1;//1、初始条件
while(i <= 10){//2、条件判断
System.out.println("HelloJava");//3、循环操作
i++;//4、迭代部分
}
System.out.println(i);//执行了10次,最后++,i=11不满足条件,退出循环
System.out.println("程序结束");
}
}
/*
需求:计算1+2+...+99+100的总和
解决方案:
1、直接打印 System.out.println(1+2+...);
2、公式 1+100+2+99+...
3、循环
4、声明1个变量i,声明1个变量sum
5、声明100个变量,声明1个变量sum
*/
public class TestWhile2{
public static void main(String[] args){
/*
int i = 1;
int sum = 0;
sum += i;
i++;
sum += i;
i++;
sum += i;
i++;
sum += i;
i++;
*/
int i = 1;//1、初始条件
int sum = 0;//2、暂时给sum一个值0
while(i <= 100){//3、循环操作
sum += i;
i++;//4、迭代部分
}
System.out.println(sum);
}
}
public class TestWhile3{
public static void main(String[] args){
//计算1~100之间,所有偶数的和
/*
int i = 0;
int sum = 0;
while(i <= 100){
if(1 % 2 == 0){//判断偶数
sum += i;
}
i++;
}
System.out.println("和是"+sum);
System.out.println("程序结束");
*/
int i = 0;
int sum = 0;
while(i <= 100){
sum += i;
i += 2;
}
System.out.println("和是:"+sum);
System.out.println("程序结束");
}
}
do-while循环
语法
do{
逻辑代码(循环操作)
}while(布尔表达式);
特点
首次循环没有条件,先执行,再判断。
举几个例子
public class TestDoWhile1{
public static void main(String[] args){
//需求:打印100遍HelloJava
//1、初始部分
int i = 1;
//先执行,再判断。
do{
//3、循环操作
System.out.println(i+"HelloJava");
//4、迭代部分
i++;
}while(i <= 100);
System.out.println(i);
System.out.println("程序结束");
}
}
//1、导包
import java.util.Scanner;
public class TestDoWhile2{
public static void main(String[] args){
/*
需求:检查作业完成情况,
根据输入的教师评语
决定学生是否抄写
*/
//2、创建Scannner
Scanner input = new Scanner(System.in);
char answer;//声明
do{
//检查作业完成情况
System.out.println("抄写一遍。");//会先执行循环体中的语句,再去判断
System.out.println("根据抄写情况输入较使评语:(y/n)");
//3、接值
answer = input.next().charAt(0);
}while(answer != 'y');
System.out.println("程序结束");
}
}
for循环
语法
for(初始部分 ; 循环条件 ; 迭代部分){
//循环操作
}
特点
适用于循环次数明确的情况
举几个例子
public class TestFor1{
public static void main(String[] args){
/*
需求:打印100遍HelloJava
*/
/*
int i = 1;
while(i <= 100){
System.out.println(i+"HelloJava");
i++;
}
System.out.println("程序结束");
*/
for(int i = 1;i <= 100;i++){
System.out.println(i+"HelloJava");
}
System.out.println("程序结束");
}
}
//1、导包
import java.util.Scanner;
public class TestFor2{
public static void main(String[] args){
//控制台输入整数n,计算n的阶乘(!n)。例:1*2*...*n
//2、创建Scanner
Scanner input = new Scanner(System.in);
//3、接收数据
System.out.println("请输入一个整数:");
int n = input.nextInt();
//4、计算n的阶乘(!n)
/*整数的默认值是int,最大取值范围是2147483647
如果计算13的阶乘超越其取值范围,值不准确了*/
long sum = 1;
for(int i = 1;i <= n;i++){
sum *= i;
}
System.out.println(n+"的阶乘是:"+sum);
System.out.println("程序结束");
}
}
//1、导包
import java.util.Scanner;
public class TestFor3{
public static void main(String[] args){
/*
现有1个班级的5名同学,请通过控制台输入5名同学的分数,并计算平均分
*/
//2、创建Scanner
Scanner input = new Scanner(System.in);
//3、接收数据
double sum = 0;
/*
System.out.println("请输入第1名同学的成绩:");
double score = input.nextDouble();
sum += score;
System.out.println("请输入第2名同学的成绩:");
double score = input.nextDouble();
sum += score;
System.out.println("请输入第3名同学的成绩:");
double score = input.nextDouble();
sum += score;
*/
for(int i = 1;i <= 5;i++){
System.out.println("请输入第"+i+"名同学的成绩:");
double score = input.nextDouble();
sum += score;
}
//4、求平均分
double avg = sum / 5;
System.out.println("平均分是:"+avg+"分");
}
}
for循环特殊形式
特殊形式1:省略循环条件,出现死循环。
特殊形式2:省略迭代部分,出现死循环。
特殊形式3:初始化、循环条件、迭代部分都省略,出现死循环。
增强型for循环
语法
for(声明语句 : 表达式)
{
//循环操作
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
举个例子
public class TestFor4 {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int num : numbers) {
System.out.print(num);
System.out.print(",");
}
}
}
输出结果为:10,20,30,40,50,
嵌套循环
在一个完整的循环结构中,嵌套另一个完整的循环结构。常见二重循环。考察逻辑,开发用的少
/*
打印3行5颗*
*****
*****
*****
*/
public class TestNested1{
public static void main(String[] args){
/*
System.out.print("*");
System.out.print("*");
System.out.print("*");
System.out.print("*");
System.out.print("*");
*/
/*
for(int j=1;j<=5;j++){
System.out.print("*");
}
System.out.println();//换行
for(int j=1;j<=5;j++){
System.out.print("*");
}
System.out.println();//换行
for(int j=1;j<=5;j++){
System.out.print("*");
}
System.out.println();//换行
*/
for(int i = 1;i <= 3;i++){//控制行数
for(int j = 1;j <= 5;j++){//控制*的数量
System.out.print("*");
}
System.out.println();//打印完后换行
}
}
}
public class TestNested2{
public static void main(String[] args){
/*
需求:计算三个班,每个班5名同学的平均成绩
*/
Scanner input = new Scanner(System.in);
for(int i = 1;i <= 3;i++){
double sum = 0;
for(int j = 1;j <= 5;j++){
System.out.println("请输入第"+j+"名学员的成绩:");
double score=input.nextDouble();
sum+=score;
}
double avg=sum/5;
System.out.println("第"+i+"个班的,5名学员平均分是:"+avg+"分。");
}
}
}
/*
打印直角三角形
*
**
***
****
******
i行数,j星星个数
i=1 星星个数=1
i=2 星星个数=2
i=3...
*/
public class TestNested3{
public static void main(String[] args){
for(int i=1;i<=5;i++){//控制行的打印
for(int j=1;j<=i;j++){//控制*打印
System.out.print("*");
}
System.out.println();//换行
}
}
}
public class TestNested4{
public static void main(String [] args){
/*
九九乘法表
*/
//i代表行,j代表列
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
//列*行,因为是从内层开始循环,j从1开始
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();//换行
}
}
}
/*
打印等腰三角形
*
***
*****
*******
*********
i代表行数,j代表星星个数
i j
1 1
2 3
3 5
4 7
5 9
用#填充,就变为了等腰三角形
####*
###***
##*****
#*******
*********
*/
public class TestNested5 {
public static void main(String[] args) {
int rows = 5;
//外层循环控制行数
for (int i = 1; i <= rows; i++) {
//1.先打印填充
//打印空格(倒三角)这里用空格填充
for (int j = rows - 1; j >= i; j--) {//4 3 2 1 4>=2
System.out.print(" ");
}
//2.再打印*
//这里内层循环控制星星个数
for (int j = 1; j <= 2 * i - 1; j++) {//1 3 5 7 9
System.out.print("*");
}
//换行,每结束完内层循环打印一行后进行换行
System.out.println();
}
}
}
流程控制语句
break
public class TestBreak1{
public static void main(String[] args){
/*
break的基本用法
break:终止、跳出switch、循环结构
*/
for(int i = 1;i <= 10;i++){
if(i == 5){
break;
}
}
}
}
public class TestBreak2{
public static void main(String[] args){
/*
现有1个班级的5名同学,请通过控制台输入5名同学的分数,
并计算平均分,如果录入分数为负值,提示用户结束
*/
Scanner input = new Scanner(System.in);
//boolean flag = true;//引入布尔值,判断
double sum = 0;
int i =1;//全局变量
for(;i < 5;i++){
System.out.println("请输入第"+i+"名学员的成绩");
double score = input.nextDouble();
if(score < 0){
System.out.println("成绩不能为负值");
//flag = flalse//小于0,将其置为负
break;
}
sum += score;
}
/*
if(flag){
souble avg = sum / 5;
System.out.println("平均分是:"+avg+"分。")
}
*/
if(i == 6){//输入5名同学后,打印平均分
double avg = sum / 5;
System.out.println("平均分是:"+avg+"分。");
}
}
}
continue
public class TestContinue1{
public static void main(String[] args){
/*
continue的基本用法
continue:结束本次循环、执行下一次循环
*/
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue;
}
System.out.println("当前值:" + i);
}
System.out.println("程序结束");
}
}
import java.util.Scanner;
public class TestContinue2{
public static void main(String[] args){
/*
现有1个班级的5名同学,请通过控制台输入5名同学的分数,并计算平均分
统计80分以上分数学员所占比例
*/
Scanner input = new Scanner(System.in);
int total = 0;
for(int i = 1;i <= 5;i++){
System.out.println("请输入第"+i+"名学员的成绩:");
double score = input.nextDouble();
if(score < 80){
continue;
}
total++;//计数
}
double rate = (double)total / 5;//double类型自动转换
System.out.println("统计80分以上分数数学员所占比例"+rate*100+"%");
}
}
总结
break有中断,打断的意思;continue有继续的意思
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
continue 适用于任何循环控制结构中。作用是结束当前循环,开始下一次循环

浙公网安备 33010602011771号