文章目录
选择结构
if else
if 单条件
if( score > 90){
给予奖励
}
双条件分支
if(){
给于奖励
}else{
给予惩罚
}
多条件
多重分支
if(score > 80){
成绩优秀
}else if(score > 60){
成绩合格
}...{
}else{
不及格
}
- 问题 多重if选择结构中各个条件的顺序可以任意排列吗?
嵌套
int score = 70;
if(score > 80){
System.out.println("成绩优秀");
}else{
// 成绩一定不是大于80的
if(score > 60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
}
案例 掷骰子
// 使用随机数 获得 一个 1-6 之间的一个数(掷骰子)
用户猜 大小
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 掷骰子 获取随机数
// 1 - 6 之间的随机数
int no1 = (int)(Math.random()*6 + 1);
int no2 = (int)(Math.random()*6 + 1);
int no3 = (int)(Math.random()*6 + 1);
System.out.println("掷骰子完毕, 开始猜大小!!");
// 接收用户传入的汉字
String s = input.next();
// 开 开
// 筛子的 点数
System.out.println(no1+"\t"+no2+"\t"+no3);
// 根据筛子 查看 到底是大是小
String s1 ;
if( (no1 + no2 + no3) > 9){
s1 = "大";
}else{
s1 = "小";
}
// 用户 猜的 和实际的点数 比较 如果一致 猜对了, 如果不一致猜错了
if(s.equals(s1)){
System.out.println("恭喜, 猜对了");
}else{
System.out.println("猜错了");
}
}
switch
格式
switch(表达式){
case 值1 :
执行语句;
break;
case 值2 :
执行语句;
break;
default :
如果以上条件都没有满足的;
}
注意点
- 从匹配到的case 开始 到 break 结束 , 不能漏写 break;
- default 的顺序 不能乱. 必须写在最后
- switch 中 可以匹配 byte char String
switch 和 if else 的区别
- 都是条件分支结构
不同点
- if 可以用于任何情况
- switch 只能用于等值判断, 不适用于范围判断
案例
使用 switch 模拟 10086 客服电话
循环结构
循环三要素
- 循环条件 - 执行循环的条件
- 循环体 - 循环所执行的主体代码
- 迭代条件 - 循环不能无限期的执行
需要在控制台打印 10次 你好世界
sout("hello world");
// 写十次...
sout("hello world");
while
语法
while(循环条件){
// 循环体
// 迭代条件
}
案例
// 在控制台打印 10次 你好世界
// 做俯卧撑 十个
int count = 1 ;
// 1- 循环条件
while(count <= 10){ // 满足条件则执行循环 不满足退出循环
// 2- 循环体
System.out.println("正在做第" + count + "个俯卧撑");
// 3- 迭代条件
count++;
}
执行流程
- 对循环条件进行判断, 为真 执行循环
- 执行完毕循环体之后, 进行迭代, 再次进行循环条件判断
- 一直到不满足条件为止 , 退出循环
案例
// 打印 1 - 100
int y = 1;
while(y <= 100){
System.out.println(y);
y++;
}
// 计算 1 + 2 + 3 + ... + 100 和
int y = 0;
// 定义和 sum
int sum = 0;
while(y < 100){
y++;
// sum = sum + y;
sum += y;
}
// 计算 1- 100 之间所有 偶数的和
// 第一种写法
int y = 0;
// 定义 和 sum
int sum = 0;
while(y < 50){
y++; // 1 2 3 4 5
sum += y*2;
}
System.out.println(sum);
// 计算 1- 100 之间所有 偶数的和
// 第二种写法
int y = 0;
int sum = 0;
while(y < 100){
y++;
if( y % 2 == 0){
sum += y;
}
}
// 计算100 以内 所有能够被3 整除的数 的和
int y = 0;
int sum = 0;
while(y < 100){
y++;
if( y % 3 == 0){
sum += y;
}
}
do while
语法
do{
//循环体
// 迭代条件
}while(循环条件);
案例
int count = 1;
do{
System.out.println(count);
count++;
}while( count <= 100);
对比 while 和 do while的区别
- while 先判断后执行
- do while 先执行 后判断
- do while 能够保证 循环体至少执行一次
案例 猜数字小游戏
// 系统随机产生一个1- 100之间数字, 用户循环输入猜大小, 如果用户猜错了数字, 系统提示 比随机的数字大还是小
Scanner input = new Scanner(System.in);
// 系统随机生成 一个0 - 100 之间的随机数 包含0 不包含100
int no = (int)(Math.random()*100);
int n;
// 计数器
int count = 0;
do{
System.out.println("请输入您猜测的数字:");
n = input.nextInt();
if(n > no){
System.out.println("大了");
}else if(n < no){
System.out.println("小了");
}else{
System.out.println("恭喜,猜对了!!");
}
// 退出条件 猜对了数字 退出
count++;
}while(no != n);
System.out.println("您一共猜了"+count+"次 就猜出了正确结果!");
for
语法
for(初始化变量; 循环条件 ; 迭代条件){
// 循环体
}
案例
for(int n = 0 ; n < 100 ; n++){
System.out.println(n);
}
while 和 for 对比
- while 循环条件 可以是 不确定循环次数的场景
- for 只能适用于 已知循环次数的场景
刚才 猜数字案例 玩游戏之前 不知道到底猜几次才能猜对, 所以使用while 不能使用for
循环打印100 次, 明确知道就打印100次 , 推荐使用for循环
案例
// 循环输入 一名学生的5门课的成绩, 并求出平均分打印
Scanner input = new Scanner(System.in);
System.out.println("请输入学生姓名");
String name = input.next();
// 求平均分 先求和
int sum = 0;
for(int i = 0 ; i < 5 ; i++){
System.out.println("请输入5门课中第"+(i+1)+"门的成绩:");
int score = input.nextInt();
// 累加
sum = sum + score ;
}
System.out.println("平均分"+(sum/5.0));
多重嵌套
条件分支 可以嵌套 条件分支
//把之前的案例 加深 , 输入多名学生的成绩
Scanner input = new Scanner(System.in);
int no ;
do{
System.out.println("请输入学生姓名");
String name = input.next();
// 求平均分 先求和
int sum = 0;
for(int i = 0 ; i < 5 ; i++){
System.out.println("请输入5门课中第"+(i+1)+"门的成绩:");
int score = input.nextInt();
// 累加
sum = sum + score ;
}
System.out.println("平均分"+(sum/5.0));
// 退出条件 输入1 继续输入 输入0 退出循环
System.out.println("继续输入请按 1 退出按 0");
no = input.nextInt();
}while(no == 1);
案例
一个班5名学生的成绩
使用双层for循环打印* 号塔案例
// i 表示行数
for(int i = 1 ; i <= 20 ; i++){ // i 的取值范围 表示代码的运行次数
// 每一行 * 的个数
// 第一行 n-1 空格
for(int j = 20 - i ;j >0 ; j--){
System.out.print(" ");
}
for(int k = 1 ; k <= 2*i-1 ; k++){
System.out.print("*");
}
System.out.println();
}
测试打印 菱形, 梯形等等
流程控制关键字
// //在 n = 5 的时候 不打印
int n = 0;
while(n < 10){
if(n != 5){
System.out.println(n);
}
n++;
}
continue
作用: 强制循环提前返回, 也就是让循环跳过本次循环中剩余的代码,直接开始进行下一次循环
for(int m = 0 ; m < 10 ; m++){
if(m == 5 ){
// if 之后的代码 不需要执行了
continue;
}
System.out.println(m);
}
break
作用:终止当前循环
在switch 中 作用是 终止当前 switch
跳出指定循环
// 在双层for循环中
f1:for(int i = 0 ; i < 10; i++){
f2:for(int k = 0 ; k< 10 ; k++){
if(k == 3){ break f1;}
System.out.println( i + "--"+k);
}
}
return
结束当前方法, 并返回到程序的调用位置