Javase(day05:流程控制语句)

if选择结构

1、分类

  • if单选结构
  • if双选结构
  • if多选结构

2、if单选结构

  • 语法:
    if (条件表达式) {
    }
  • 说明:只有当条件表达式返回值为true时,才会执行花括号(代码块)中的代码

3、if双选结构

  • 语法:
    if (条件表达式) {
    }
    else {
    }
  • 说明:if双选结构有且只有一个代码块中的代码会执行(二选一)
  • 练习:模拟用户登录,用户名为“admin”,密码为“123456”
Scanner input = new Scanner(System.in);
System.out.print("请输入用户名:");
String userName = input.next();
System.out.print("请输入密码:");
String password = input.next();

if (userName.equals("admin") && password.equals("123456")) {
    System.out.println("登录成功");
}
else {
    System.out.println("登陆失败");
}
  • 注意点:在该练习中,比较两字符串使用的equals方法,在前面数据类型的学习中,了解到基本数据类型使用“==”是比较“数据值”是否相等,而引用数据类型使用“==”是比较“地址值”是否相等,而字符串属于引用数据类型,所以使用equals方法比较内容是否相等

4、if多选结构

  • 语法:
    if (条件表达式) {
    } else if(条件表达式){
    }else if(条件表达式){
    }......
    else{
    }
  • 说明:if多选结构中有且只有一个代码块会执行(多选一)

5、if选择结构总结

  • 如果if选择结构中只有一行代码,花括号可以省略,但初学者不建议省略,会影响代码可读性
  • 当if单选结构和if多选结构都能解决同一问题时,建议使用if多选结构,因为多选结构效率更高
    例如:
// 根据分数输出分数所代表级别int num = 98;
if (num >= 90) {
    System.out.println("优秀");
} else if (num >= 70 && num < 90) {
    System.out.println("良好");
} else if (num >= 60 && num < 70) {
    System.out.println("及格");
} else if (num >= 0 && num < 60) {
    System.out.println("不及格");
}
// 多选结构,当num = 98 时,运行到第一个条件表达式时,满足条件,输出优秀后跳出选择结构

int num = 98;
if (num >= 90) {
    System.out.println("优秀");
} 
if (num >= 70 && num < 90) {
    System.out.println("良好");
} 
if (num >= 60 && num < 70) {
    System.out.println("及格");
}
if (num >= 0 && num < 60) {
    System.out.println("不及格");
}
// 单选结构,每次都需要运行一次条件表达式,执行效率低
  • 在Java语言中,“{}”我们称之为代码块,而定义在方法体和代码块中的变量,我们称之为局部变量
    1、局部变量生命周期:定义局部变量时“出生”,执行到大括号的结束位置“死亡”
    2、代码块的特点:在代码块中定义的变量,只能在当前作用域中使用,在代码块之外不能使用
    3、if选择结构,我们也称之为“带名称”或“带条件”的代码块

  • 练习:
    输入时(hour)、分(minute)、秒(second)的一个具体时间,要求打印出它的下一秒出来(一天24小时)。例如输入的是23时59分59秒,则输出00:00:00;例如输入17时09分59秒,则输出17:10:00。

2、switch选择结构

  • 语法:
switch (表达式) {
        case 常量1:
           // 当“表达式”结果和“常量1”的值匹配的时候,则执行此处的代码。
           break;
        case 常量2:
           // 当“表达式”结果和“常量2”的值匹配的时候,则执行此处的代码。
           break;
        case 常量3:
           // 当“表达式”结果和“常量3”的值匹配的时候,则执行此处的代码。
           break;
        ......
        default:
                  // 当以上case都无法匹配成功的时候,则执行此处的代码。
 }
  • switch选择结构的注意点
    1、关于switch的注意点

    • 此处表达式结果支持byte、short、int、char、String和枚举,不支持boolean和浮点型

    2、关于case的注意点

    • case后只能接常量,不能接变量,这样保证了匹配的安全性
    • case后面的常量值不能有相同的,否则会编译错误
    • case后面的常量数据类型必须和表达式返回值的数据类型一致,此处的数据类型保持一致,包含了隐式类型转换后的类型

    3、关于break的注意点

    • 一旦执行了break语句,就会跳出选择结构,执行选择结构之后的代码
    • break可以省略,省略过后会发生穿透现象,直到遇到下一个break
      例如:
/* 
需求:随机生成[0,100],如果成绩为: 90(包含)到100(包含)输出优秀,70(包含)到90输出良好, 60(包含)到70输出及格,60分以下输出不及格
*/

       // 随机生成[30,60]的数
       int num = (int)(Math.random() * 31) + 30;


       System.out.println(num);
       int score = (int)(Math.random() * 101);
       System.out.println("生成的分数为:" + score);

       if (score < 0 || score > 100) {
           System.out.println("成绩输入有误");
       } else {
           switch (score / 10) {
               case 10 :
               case 9 :
                   System.out.println("优秀");
                   break;
               case 8 :
               case 7 :
                   System.out.println("良好");
                   break;
               case 6 :
                   System.out.println("及格");
                   break;
               default:
                   System.out.println("不合格");
           }
       }

在本例中使用到了Math类中的random方法,该方法可以随机生成一个[0.0, 1.0)的小数

3、if和switch的总结

  • switch能做的事,if都能完成;但if能完成的操作,switch不一定能完成
  • if常用于“区间判断”,也就是boolean类型结果的判断
  • switch常用于“固定值判断”,很多公司明确规定对固定值的判断使用switch,结构清晰

4、for循环结构

  • 语法:
    for(循环初始化表达式; 循环条件表达式; 循环后的操作表达式) {
    循环体;
    }
  • 执行顺序:循环初始化表达式 --> 循环条件表达式 --> 循环体 --> 循环后的操作表达式 --> 循环条件表达式 --> 循环体 --> ......

5、while循环结构

  • 语法:
    while(循环条件表达式){
    循环体;
    }
  • 执行顺序:先判断循环条件表达式,然后执行循环体
  • 注意点:在while循环结构中,”循环后的操作表达式“放的位置对结果有影响

6、do...while循环结构

  • 语法:
    do {
    循环体;
    } while (循环条件表达式)
  • 执行顺序:先执行一次循环体,然后对循环条件表达式进行判断

7、三种循环的使用频率

for循环最常使用,while其次,do...while使用频率很低,几乎不会使用

8、死循环

  • 概念:无法靠自身的控制终止的循环

  • 分类
    1、有害的死循环

    • 引起原因:逻辑混乱或书写语法错误

    2、有利的死循环

    • 最简单的死循环
// for死循环

for (; ; ;) {
}

// while死循环while (true) {
}

9、break关键字和continue关键字

  • break关键字
    1、使用场合:可以在switch选择结构中使用,还可以在循环结构中使用
    2、具体作用:在switch中使用,跳出switch选择结构;在循环结构中使用,跳出循环结构,继续执行循环结构之后的代码
  • continue关键字
    1、使用场合:只能在循环结构中使用
    2、具体作用:跳过一次循环,继续执行下一次循环
  • 示例:
// 韩信点兵,三人一组余两人,五人一组余三人,七人一组余四人,请问最少需要多少士兵。int i = 1;
while (true) {
    if (i % 3 == 2 && i % 5 == 3 && i % 7 == 4) {
        break;
    }
    i++;
}
System.out.println("最少需要人数:" + i);

  • 带标签的break和continue
    因为break和continue终止或跳过的是最近的循环结构,如果想要终止或跳过外层循环结构,可以给外层循环加上一个标签,然后使用“break 标签名”或“continue 标签名”来完成

10、假设法

// 输入一个任意整数,判断它是否为质数/*
先假设输入的数为质数,设置一个flag为true,当判断出该数不为质数时,将flag重新赋值为false
*/
Scanner input = new Scanner(System.in);
System.out.print("请输入一个正整数:");
int num = input.nextInt();
boolean flag = true;
for (int i = 2; i < num; i++) {
    if (num % i == 0) { 
        flag = false;   
    }
 }
 if (flag) {
    System.out.println(num + "是一个素数");
 } 
 else {
    System.out.println(num + "不是一个素数");
 }


11、嵌套循环(难点)

主要是一些练习,能使用单循环解决问题,尽量不要使用嵌套循环,嵌套循环的效率较低

//打印等腰三角形int count = 5;
for (int i = 0; i < count; i++) {
    for (int j = 1; j <= count-i-1; j++) {
        System.out.print(" "); 
    }    
    for (int k = 1; k <= 2 * i + 1; k++) {
        System.out.print("*");   
    }    
    System.out.println();    
}

// 2、使用嵌套循环实现九九乘法表(注意循环变量的初始值)。 
for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(j + "*" + i + "=" + i*j + "\t"); 
    }     
    System.out.println();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值