Java语言基础(四)流程控制语句

    技术2022-07-11  69

    文章内容输出来源:拉勾教育大数据高薪训练营

    拉勾教育大数据高薪训练营 学习笔记

    Java语言基础(四)

    文章内容输出来源:拉勾教育大数据高薪训练营 拉勾教育大数据高薪训练营 学习笔记四、流程控制语句(顺序/分支/循环)4.1 分支结构的概念4.2 if分支结构4.3 if else分支结构4.4 if else if else4.5 案例:个人所得税计算4.6 switch case分支结构4.7 循环结构的概念4.8 for循环4.9 for循环打印奇数4.10 continue4.11 break4.12 break 跳出多层循环4.13 for循环实现猜数字游戏4.14 双重for循环4.15 双重循环实现素数打印(除到平方根)4.16 while循环4.17 比较 for 和 while 循环4.18 案例:while循环实现反向输出4.19 do while(熟悉)案例: 使用do while循环检查学习效果 4.20 循环的笔试考点总结

    四、流程控制语句(顺序/分支/循环)

    4.1 分支结构的概念

    当需要进行条件判断并作出选择时,使用分支结构

    4.2 if分支结构

    if(条件表达式) { 语句块; }

    4.3 if else分支结构

    if(条件表达式) { 语句块; } else { 语句块2; }

    4.4 if else if else

    if(条件表达式) { 语句块1; } else if(条件表达式) { 语句块2; } else { 语句块3 }

    4.5 案例:个人所得税计算

    根据用户输入的薪水计算个人所得税并打印出来,其中个税起征点为:5000元,具体规则如下 个人所得税公式: 本月应纳税所得额 * 对应的税率 - 速算扣除数 比如工资是13000,那么超过5000的部分(全月应纳税所得额)为8000,其对应的税率是10%,速算扣除数为210元因此,个人所得税 = 8000 * 10% - 210 = 590(元)

    4.6 switch case分支结构

    注:switch()中支持的数据类型有 byte、short、char以及int类型,从jdk1.5开始支持枚举类型,从jdk1.7开始支持String类型

    swith(变量/表达式) { case 字面值1: 语句块1; break; case 字面值2: 语句块1; break; ... default: 语句块n; }

    没有break就会发生case穿透(即代码一直执行,知道遇到break才跳出switch case语句)

    default 也可以放在最开始,但是要加上break,否则也会发生case穿透

    // 使用switch case分支结构实现考试成绩的等级判断 int score = 66; switch(score / 10) { case 10: System.out.println("等级A"); break; // 如果没有break,会发生case穿透 case 9: System.out.println("等级A"); break; case 8: System.out.println("等级B"); break; case 7: System.out.println("等级C"); break; case 6: System.out.println("等级D"); break; default: System.out.println("等级E"); //最后一项没有break }

    4.7 循环结构的概念

    在Java程序中若希望重复执行一段代码时,就需要使用循环结构任何复杂的程序逻辑都可以通过顺序、分支、循环三种程序结构实现

    4.8 for循环

    for(初始化表达式; 条件表达式; 修改初始值表达式) { 循环体; } for(int i = 1; i <= 10; i++) { // i = i + 1 => i += 1 => i++ System.out.println("今晚吃鸡,大吉大利,正在进行第" + i + "场游戏..."); Thread.sleep(5000); // 表示模拟睡眠5秒的效果 System.out.println("本场游戏结束!\n\n\n"); } System.out.println("该休息了,否则明天早上就要迟到了!");

    4.9 for循环打印奇数

    // 使用for循环打印1 ~ 100之间的所有奇数 // 方式一:根据奇数的概念进行打印 for(int i = 1; i <= 100; i++) { // 若当前i的数值是奇数时则打印,否则不打印 奇数就是不能被2整除的数,也就是对2取余的结果不为0 if(i % 2 != 0) { System.out.println("i = " + i); } } // 方式二:根据等差数列的概念来打印 每两个数据之间相差2 for(int i = 1; i <= 100; i += 2) { System.out.println("i = " + i); } // 方式三:根据通项公式的规则来打印 2*i-1 for(int i = 1; i <= 50; i++) { System.out.println("i = " + (2 * i - 1)); }

    4.10 continue

    continue语句用在循环体中,用于提前结束本次循环二开始下一次循环

    4.11 break

    break用于退出当前语句块,break用在循环体中用于退出循环for( ; ; ) - 这种没有循环条件的循环叫做 无限循环,俗称“死循环”break可以配合无限循环使用 // 声明一个boolean类型的变量作为发送方的标志 boolean flag = true; // 使用无限循环来模拟不断地聊天 for(;;) { // 1.提示用户输入要发送的聊天内容并使用变量记录 System.out.println("请" + (flag? "张三": "李四") +"输入要发送的聊天内容:"); Scanner sc = new Scanner(System.in); String str = sc.next(); // 2.判断用户输入的内容是否为"bye",若是则聊天结束 if("bye".equals(str)) { System.out.println("聊天结束!"); break; // 用于跳出当前循环 } // 3.若不是"bye"则打印用户输入的聊天内容 System.out.println((flag? "张三说:": "李四说:") + str + "\n\n\n"); flag = !flag; }

    4.12 break 跳出多层循环

    在嵌套的循环结构中,break用于退出所在循环体如果要退出外层循环体,需要使用标号的方式 /* 使用双重for循环打印九九乘法表 */ public class ForForTableTest { public static void main(String[] args) { // 1.使用外层for循环控制打印的行数,一共9行 outer:for(int i = 1; i <= 9; i++) { // 2.使用内层for循环控制打印的列数,最多9列,规律是:与当前行所在的行数相等 for(int j = 1; j <= i; j++) { // 3.使用两个循环变量来拼接等式 System.out.print(j + "*" + i + "=" + j*i + " "); // 4.当打印完毕6*6 = 36后结束整个打印 if(6 == j) { //break; // 主要用于跳出循环,但该关键字只能跳出当前所在的循环 break outer; // 表示可以跳出外层for循环 } } System.out.println(); } } }

    4.13 for循环实现猜数字游戏

    /* 编程使用for循环实现猜数字游戏 */ import java.util.Random; import java.util.Scanner; public class ForGuessTest { public static void main(String[] args) { // 1.随机生成1 ~ 100之间的整数并使用变量记录 Random ra = new Random(); int temp = ra.nextInt(100) + 1; //System.out.println("temp = " + temp); // 4.声明一个int类型的变量来统计用户猜测的次数 int cnt = 0; for(;;) { // 2.提示用户输入1 ~ 100之间猜测的整数并使用变量记录 System.out.println("请输入1 ~ 100之间猜测的整数:"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); cnt++; // 3.使用用户输入的整数与随机数之间比较大小并给出对应的提示 if(num > temp) { System.out.println("猜大了,再小一点吧!"); } else if(num < temp) { System.out.println("猜小了,再大一点吧!"); } else { System.out.println("恭喜您猜对了,游戏结束!"); break; } } if(1 == cnt) { System.out.println("你果然是个大咖!"); } else if(cnt <= 6) { System.out.println("水平不错,继续加油哦!"); } else { System.out.println("你还可以多玩几次游戏!"); } } }

    4.14 双重for循环

    for(初始化表达式1; 条件表达式2; 修改初始值表达式3) { for(初始化表达式4; 条件表达式5; 修改初始值表达式6) { 循环体; } } 特点: 在以后的开发中若需要打印多行多列时,需要使用双重循环多重循环不宜嵌套太多层,否则效率很低。一般到三重循环即可,最常见的就是双重循环

    4.15 双重循环实现素数打印(除到平方根)

    /* 编程使用双重for循环打印2 ~ 100之间的所有素数 */ public class ForForPrimeTest { public static void main(String[] args) { // 1.使用for循环打印2 ~ 100之间的所有整数 for(int i = 2; i <= 100; i++) { // 3.声明一个boolean类型的变量作为是否为素数的标记 boolean isPrime = true; // 2.针对每一个当前的整数都要判断是否为素数,若是素数则打印,否则不打印 // 判断一个数是否为素数的方法是:若该数不能被2到它本身-1之间的所有整数整除时,则证明该数是素数 // 使用内层for循环用于控制2到该数自身-1之间的范围 // for(int j = 2; j < i; j++) { // 只需要判断2到该数的平方根即可,因为随着除数的增大商必然减小,会造成重复的判断 for(int j = 2; j <= Math.sqrt(i); j++) { // 使用当前数除以该循环中的每个数据并判断是否可以整除,只要找到一个可以整除的数据,则证明该数不是素数 if(0 == i % j) { isPrime = false; break; // 跳出当前所在的内层循环,也就是不需要再继续除以下一个整数 } } // 只可以打印素数 if(isPrime) { System.out.println("i = " + i); } } } }

    4.16 while循环

    while(条件表达式) { 循环体; } /* 编程实现while循环的使用 */ public class WhileTest { public static void main(String[] args) { // 使用while循环打印1 ~ 10之间的所有整数 int i = 1; while(i <= 10) { System.out.println("i = " + i); i++; } } }

    4.17 比较 for 和 while 循环

    while 循环和 for 循环完全可以互换,当然推荐使用 for 循环无限循环:while(true) 等价于 for(; ; ) (空格可以忽略)while 循环更适合于明确循环条件但不明确循环次数的场合中for 循环更适合于明确循环次数或范围的场合中

    4.18 案例:while循环实现反向输出

    /* 编程使用while循环实现任意正整数的反向输出 */ import java.util.Scanner; public class WhileReverseTest { public static void main(String[] args) { // 1.提示用户输入一个正整数并使用变量记录 123 System.out.println("请输入一个正整数:"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); // 2.使用while循环进行拆分并打印(此方法可以保存逆序后的最高位的0) //while(num > 0) { //System.out.print(num % 10); // 拆分个位数 //num /= 10; // 丢弃个位数 //} // 2.使用while循环拆分整数中的每个数字并记录到变量中 int res = 0; int temp = num; // 指定变量作为num的替身 while(temp > 0) { res = res*10 + temp % 10; // 3 32 321 temp /= 10; // 12 1 0 } // 3.打印逆序后的结果 System.out.println(num + "逆序后的结果是:" + res); } }

    4.19 do while(熟悉)

    注意分号

    先执行再判断条件,即至少执行一次循环体

    do { 循环体; } while(条件表达式); /* 编程实现do while循环的使用 */ public class DoWhileTest { public static void main(String[] args) { // 使用do while循环打印1 ~ 10之间的所有整数 int i = 1; do { System.out.println("i = " + i); i++; } while(i <= 10); } }

    案例: 使用do while循环检查学习效果

    /* 编程使用do while循环来模拟学习效果的检查 */ import java.util.Scanner; public class DoWhileCheckTest { public static void main(String[] args) throws Exception { String msg = null; // 空 do { System.out.println("正在疯狂学习中..."); Thread.sleep(5000); // 模拟5秒钟 System.out.println("是否合格?(y/n)"); Scanner sc = new Scanner(System.in); msg = sc.next(); } while(!"y".equals(msg)); System.out.println("恭喜任务合格!"); } }

    4.20 循环的笔试考点

    // 典故: 十动然拒 笔试考点:有没有分号 // 以下代码可以顺利进行 int i = 1; while(i <= 10000) { System.out.println("I Love You !"); i++; } // 多加一个分号;以后,程序卡住了 int i = 1; while(i <= 10000) ; { System.out.println("I Love You !"); i++; // 上一段代码效果相当于: int i = 1; while(i <= 10000) { ; // 空语句,啥也不干,可以用于延时 } { System.out.println("I Love You !"); i++; } 所以程序才会卡住

    总结

    break 可以用在循环和 switch case分支结构中continue 只能用于循环结构中,不能用于switch case分支结构
    Processed: 0.014, SQL: 9