首页 > 代码库 > 【原】Java学习笔记007 - 流程控制
【原】Java学习笔记007 - 流程控制
1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // for循环 6 // 格式 7 // for (int i = 初始值; i < value; i++) { 8 // 9 // }10 // 口诀:左初值、右步长、条件在中间、处理在内部11 // 1、左初值:声明一个变量并给变量赋值12 // 2、右步长:控制左边声明的变量的变化幅度,为了让循环有跳出的可能13 // 3、条件在中间:中间部分是循环的条件,当条件满足时,执行循环体中的语句;不满足时就不执行14 15 // 需求:使用for循环输出1~516 for (int i = 1; i <= 5; i++) {17 System.out.println(i);18 }19 20 // for循环执行顺序:(面试时可能被问到的问题)21 // 可以结合调试模式查看变量的值的变化,得到如下结论:22 // 1、第一次循环----->先做左初值的变量声明 和 赋初始化值23 // 2、 ----->判断条件是否满足24 // 3、 ----->进入到循环体中执行语句25 // 4、 ----->执行完循环体中的语句后,再做右步长,控制左边变量的变化幅度26 // 5、第二次循环----->从这次开始就不再做左初值,直接判断条件是否满足27 // 6、 ----->进入到循环体中执行语句28 // 7、 ----->执行完循环体中的语句后,再做右步长,控制左边变量的变化幅度29 // 8、...30 // 9、 ----->直到某次循环条件不再满足,跳出循环31 }32 }
1 package cn.temptation; 2 3 public class Sample02 { 4 public static void main(String[] args) { 5 // 需求:分别使用while循环 和 for循环输出 1~5 6 7 // while循环 8 int i = 1; 9 while (i <= 5) {10 System.out.println(i);11 i++;12 }13 14 // for循环15 for (int j = 1; j <= 5; j++) {16 System.out.println(j);17 }18 19 // 对比一下while循环 和 for循环20 // 发现 while 循环 和 for 循环 差不多,只是把多行语句合并到一行里了21 }22 }
1 package cn.temptation; 2 3 public class Sample03 { 4 public static void main(String[] args) { 5 // 需求:使用for循环输出1~100 6 // 需求:使用for循环计算1+2+...+100 7 8 // 左初值:初始值由开发人员自己设置 9 10 // 写法111 for (int i = 1; i <= 100; i++) {12 System.out.println(i);13 }14 15 // 写法216 for (int i = 0; i < 100; i++) {17 System.out.println(i + 1);18 }19 20 // 写法321 for (int i = -1; i < 99; i++) {22 System.out.println(i + 2);23 }24 25 // 注意:第11行、第16行、第21行都使用了变量i,之前讲变量名不能重复,这里为何没有提示语法错误?26 // 因为变量的作用范围(作用域),这里的for循环中定义的变量,只能在该循环中可以使用,超出了该循环范围就无法使用了27 // 语法错误:i cannot be resolved to a variable28 // System.out.println(i);29 30 // 定义总和的变量31 int sum = 0;32 33 for (int i = 1; i <= 100; i++) {34 sum += i;35 }36 37 System.out.println("1+2+...+100=" + sum);38 }39 }
1 package cn.temptation; 2 3 public class Sample04 { 4 public static void main(String[] args) { 5 // 需求:使用for循环列出1~100之间的奇数 6 7 // 写法1、奇数的间隔为2 8 // for (int i = 1; i < 100; i += 2) { 9 // System.out.println(i);10 // }11 for (int i = 1; i < 100; i = i + 2) {12 System.out.println(i);13 }14 15 // 写法2、奇数是和2求余为1的数16 for (int i = 1; i <= 100; i++) {17 if (i % 2 == 1) {18 System.out.println(i);19 }20 }21 }22 }
1 package cn.temptation; 2 3 public class Sample05 { 4 public static void main(String[] args) { 5 // 需求:计算1~100之间的偶数的和 6 // int sum = 0; 7 8 // 写法1、偶数的间隔为2 9 // for (int i = 0; i <= 100; i += 2) {10 // sum += i;11 // }12 13 // 写法2、偶数是和2求余数为0的数14 // for (int i = 0; i <= 100; i++) {15 // if (i % 2 == 0) {16 // sum += i;17 // }18 // }19 20 // System.out.println("1~100之间的偶数的和为:" + sum);21 22 // 作为和的变量sum也在for循环中定义,如何写?23 // 变量sum在循环结构的头部进行声明和赋初始化值,在循环体内可以使用它,但是在循环体外无法访问它24 // for (int i = 0, sum = 0; i <= 100; i += 2) {25 // sum += i;26 // // 添加选择结构,让循环在最后一次输出结果27 // if (i == 100) {28 // System.out.println("1~100之间的偶数的和为:" + sum);29 // }30 // }31 32 // System.out.println("1~100之间的偶数的和为:" + sum);33 34 // 注意:如下写法,变量sum会在每次循环时重新设置为0,也就不会保存之前循环操作的结果35 // 这也从侧面说明左初值中的内容只在第一次循环时执行,后续循环时都不会再执行36 for (int i = 0; i <= 100; i++) {37 int sum = 0;38 sum += i;39 System.out.println("1~100之间的偶数的和为:" + sum);40 }41 }42 }
1 package cn.temptation; 2 3 public class Sample06 { 4 public static void main(String[] args) { 5 // 需求:使用for循环统计100~999之间的水仙花数并计算有多少个? 6 7 // 规则:以三位数字为例,数字的值 = (百位上的数字 * 百位上的数字 * 百位上的数字) 8 // + (十位上的数字 * 十位上的数字 * 十位上的数字) 9 // + (个位上的数字 * 个位上的数字 * 个位上的数字),则称为是一个水仙花数10 // 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 311 12 // 定义统计用个数变量13 int count = 0;14 15 for (int number = 100; number <= 999; number++) {16 // 获取个位数字17 int i = number / 1 % 10;18 // 获取十位数字19 int j = number / 10 % 10;20 // 获取百位数字21 int k = number / 100 % 10;22 23 if (number == i * i * i + j * j * j + k * k * k) {24 // 满足规则的数字输出25 System.out.println(number);26 27 count++;28 }29 }30 31 System.out.println("100~999之间的水仙花数并计算有" + count + "个");32 }33 }
1 package cn.temptation; 2 3 public class Sample07 { 4 public static void main(String[] args) { 5 // 需求:使用for循环计算10的阶乘 6 // 阶乘:10! = 10 * 9 * 8 * 7 * ... * 1 7 8 // 定义结果变量 9 int result = 1;10 11 // 写法112 // for (int i = 1; i <= 10; i++) {13 // result *= i;14 // }15 16 // 写法217 for (int i = 10; i >= 1; i--) {18 result *= i;19 }20 21 System.out.println("10的阶乘为:" + result);22 23 // 注意:编程动手之前,先考虑一下程序执行结果的数值范围,选择合适的数据类型24 }25 }
1 package cn.temptation; 2 3 public class Sample08 { 4 public static void main(String[] args) { 5 // 需求:使用for循环解决百钱百鸡问题:母鸡一只5元,公鸡一只3元,小鸡三只1元,有100元,如何买到100只鸡?母鸡多少只?公鸡多少只?小鸡多少只?(母鸡、公鸡、小鸡都有) 6 7 // 思路: 8 // 从需求中得到一些等式 9 // 母鸡数量 + 公鸡数量 + 小鸡数量 = 10010 // 母鸡单价 * 母鸡数量 + 公鸡单价 * 公鸡数量 + 小鸡单价 * 小鸡数量 = 10011 // 小鸡数量是3的倍数12 13 // 运用"穷举法"14 // 如果买1只母鸡,再买1只公鸡,还能买多少只小鸡15 // 如果买1只母鸡,再买2只公鸡,还能买多少只小鸡16 // ...17 // 如果买2只母鸡,再买1只公鸡,还能买多少只小鸡18 // 如果买2只母鸡,再买2只公鸡,还能买多少只小鸡19 // ...20 21 System.out.println("使用for循环求解百钱百鸡问题:");22 23 for (int i = 1; i < 20; i++) { // 计算母鸡24 for (int j = 1; j < 33; j++) { // 计算公鸡25 // 小鸡数量26 int k = 100 - i - j;27 28 if ((5 * i + 3 * j + k / 3 == 100) && (k % 3 == 0)) {29 System.out.println("母鸡:" + i + "只,公鸡:" + j + "只,小鸡:" + k + "只");30 }31 }32 }33 }34 }
1 package cn.temptation; 2 3 public class Sample09 { 4 public static void main(String[] args) { 5 // 需求:打印显示 4 * 4 正方形的点阵 6 7 // 写法1、最原始的写法 8 // System.out.println("****"); 9 // System.out.println("****");10 // System.out.println("****");11 // System.out.println("****");12 13 // 写法2、借助于 \r \n实现换行的操作14 // System.out.println("****\r\n****\r\n****\r\n****");15 16 // 思路:17 // 1、在一行中把*号输出4次,形成****18 // 2、再在3个不同的行上重复步骤1的操作19 20 // 写法3、分步循环操作21 // for (int i = 0; i < 4; i++) {22 // System.out.print("*");23 // }24 // System.out.println();25 // for (int i = 0; i < 4; i++) {26 // System.out.print("*");27 // }28 // System.out.println();29 // for (int i = 0; i < 4; i++) {30 // System.out.print("*");31 // }32 // System.out.println();33 // for (int i = 0; i < 4; i++) {34 // System.out.print("*");35 // }36 // System.out.println();37 38 // 写法4、针对写法3的改进,因为有发现相同的事情重复做,自然考虑使用循环39 // 循环的嵌套40 // 内部的操作时在一行中循环输出4个星号,把内部的操作作为一个整体,在外部再重复内部的这个操作3次41 42 // 外部循环操作:重复内部的这个操作4次43 for (int j = 0; j < 4; j++) {44 // 内部循环操作:在一行中循环输出4个星号45 for (int i = 0; i < 4; i++) {46 System.out.print("*");47 }48 System.out.println();49 }50 }51 }
1 package cn.temptation; 2 3 public class Sample10 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // * 7 // ** 8 // *** 9 // ****10 // *****11 12 // 思路:找规律13 // 1、第1行1个星号14 // 2、第2行2个星号15 // 3、第3行3个星号16 // 4、第4行4个星号17 // 5、第5行5个星号18 19 // 分步操作20 // for (int i = 0; i < 1; i++) {21 // System.out.print("*");22 // }23 // // 换行24 // System.out.println();25 // for (int i = 0; i < 2; i++) {26 // System.out.print("*");27 // }28 // // 换行29 // System.out.println();30 // for (int i = 0; i < 3; i++) {31 // System.out.print("*");32 // }33 // // 换行34 // System.out.println();35 // for (int i = 0; i < 4; i++) {36 // System.out.print("*");37 // }38 // // 换行39 // System.out.println();40 // for (int i = 0; i < 5; i++) {41 // System.out.print("*");42 // }43 // // 换行44 // System.out.println();45 46 // 看到有重复的操作,考虑使用循环47 // 看见有变化的量:1、2、3、4、5,考虑使用变量48 // 通过找规律,我们发现这变量的值和其所在的行号一致49 // 行号是什么?行号就是外层循环操作的当前次操作的数字,且这个数字是提供给内层循环来使用的数字(用于循环条件的控制)50 51 // 写法152 // 外层循环53 for (int i = 1; i <= 5; i++) {54 // 内层循环55 for (int j = 0; j < i; j++) {56 System.out.print("*");57 }58 // 换行59 System.out.println();60 }61 62 // 写法263 for (int i = 0; i < 5; i++) {64 for (int j = 0; j <= i; j++) {65 System.out.print("*");66 }67 // 换行68 System.out.println();69 }70 }71 }
1 package cn.temptation; 2 3 public class Sample11 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // ***** 7 // **** 8 // *** 9 // **10 // *11 12 // 思路:找规律13 // 1、第1行5个星号14 // 2、第2行4个星号15 // 3、第3行3个星号16 // 4、第4行2个星号17 // 5、第5行1个星号18 19 // 写法120 for (int i = 0; i < 5; i++) {21 for (int j = 4; j >= i; j--) {22 System.out.print("*");23 }24 // 换行25 System.out.println();26 }27 28 // 写法229 for (int i = 0; i < 5; i++) {30 for (int j = 0; j < 5 - i; j++) {31 System.out.print("*");32 }33 System.out.println();34 }35 }36 }
1 package cn.temptation; 2 3 public class Sample12 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // * 7 // ** 8 // *** 9 // ****10 // *****11 12 // 思路:13 // 1、星号还是打印一样的星号14 // 2、在每一行输出星号之前,先输出了空格15 // 3、一个较复杂的问题分解为两个简单的问题来处理:分解为每行中先输出空格,再输出星号16 17 for (int i = 0; i < 5; i++) {18 // 输出空格的处理19 for (int j = 0; j < 4 - i; j++) {20 System.out.print(" ");21 }22 23 // 输出星号的处理24 for (int j = 0; j <= i; j++) {25 System.out.print("*");26 }27 System.out.println();28 }29 }30 }
1 package cn.temptation; 2 3 public class Sample13 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // ***** 7 // **** 8 // *** 9 // **10 // *11 12 for (int i = 0; i < 5; i++) {13 // 打印空格14 for (int j = 0; j < i; j++) {15 System.out.print(" ");16 }17 18 // 打印星号19 for (int j = 0; j < 5 - i; j++) {20 System.out.print("*");21 }22 23 // 换行24 System.out.println();25 }26 }27 }
1 package cn.temptation; 2 3 public class Sample14 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // * 7 // *** 8 // ***** 9 // *******10 // *********11 12 for (int i = 0; i < 5; i++) {13 // 打印空格14 for (int j = 0; j < 4 - i; j++) {15 System.out.print(" ");16 }17 18 // 打印星号19 for (int j = 1; j <= i * 2 + 1; j++) {20 System.out.print("*");21 }22 23 // 换行24 System.out.println();25 }26 }27 }
1 package cn.temptation; 2 3 public class Sample15 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // * 7 // ** 8 // *** 9 // ****10 // *****11 // ****12 // ***13 // **14 // *15 16 // 思路:不妨把这个问题分解为打印上部分 和 下部分17 18 // 打印上部分19 for (int i = 0; i < 5; i++) {20 for (int j = 0; j <= i; j++) {21 System.out.print("*");22 }23 // 换行24 System.out.println();25 }26 27 // 打印下部分28 for (int i = 0; i < 4; i++) {29 for (int j = 0; j < 4 - i; j++) {30 System.out.print("*");31 }32 // 换行33 System.out.println();34 }35 }36 }
1 package cn.temptation; 2 3 public class Sample16 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // * 7 // ** 8 // *** 9 // ****10 // *****11 // ****12 // ***13 // **14 // *15 16 // 思路:不妨把这个问题分解为打印上部分 和 下部分17 18 // 打印上部分19 for (int i = 0; i < 5; i++) {20 // 打印空格21 for (int j = 0; j < 4 - i; j++) {22 System.out.print(" ");23 }24 // 打印星号25 for (int j = 0; j <= i; j++) {26 System.out.print("*");27 }28 // 换行29 System.out.println();30 }31 32 // 打印下部分33 for (int i = 0; i < 4; i++) {34 // 打印空格35 for (int j = 0; j <= i; j++) {36 System.out.print(" ");37 }38 // 打印星号39 for (int j = 0; j < 4 - i; j++) {40 System.out.print("*");41 }42 // 换行43 System.out.println();44 }45 }46 }
1 package cn.temptation; 2 3 public class Sample17 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // * 7 // *** 8 // ***** 9 // *******10 // *********11 // *******12 // *****13 // ***14 // *15 16 // 思路:不妨把这个问题分解为打印上部分 和 下部分17 18 // 打印上部分19 for (int i = 0; i < 5; i++) {20 // 打印空格21 for (int j = 0; j < 4 - i; j++) {22 System.out.print(" ");23 }24 25 // 打印星号26 for (int j = 1; j <= i * 2 + 1; j++) {27 System.out.print("*");28 }29 30 // 换行31 System.out.println();32 }33 34 // 打印下部分35 for (int i = 0; i < 4; i++) {36 // 打印空格37 for (int j = 0; j <= i; j++) {38 System.out.print(" ");39 }40 41 // 打印星号42 for (int j = 0; j <= 7 - i * 2 - 1; j++) {43 System.out.print("*");44 }45 46 // 换行47 System.out.println();48 }49 }50 }
1 package cn.temptation; 2 3 public class Sample18 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印如下图形 6 // * 7 // * * 8 // * * 9 // * *10 // * *11 // * *12 // * *13 // * *14 // *15 16 // 思路:不妨把这个问题分解为打印上部分 和 下部分17 18 // 打印上部分19 for (int i = 0; i < 5; i++) {20 // 打印空格21 for (int j = 0; j < 4 - i; j++) {22 System.out.print(" ");23 }24 25 // 打印星号26 System.out.print("*");27 28 if (i != 0) { // 第一行不执行29 // 打印空格30 for (int j = 0; j < 2 * i - 1; j++) {31 System.out.print(" ");32 }33 34 // 打印星号35 System.out.print("*");36 }37 38 39 // 换行40 System.out.println();41 }42 43 // 打印下部分44 for (int i = 0; i < 4; i++) {45 // 打印空格46 for (int j = 0; j <= i; j++) {47 System.out.print(" ");48 }49 50 // 打印星号51 System.out.print("*");52 53 if (i != 3) { // 最后一行不执行54 // 打印空格55 for (int j = 0; j < 5 - 2 * i; j++) {56 System.out.print(" ");57 }58 59 // 打印星号60 System.out.print("*");61 }62 63 // 换行64 System.out.println();65 }66 }67 }
1 package cn.temptation; 2 3 public class Sample19 { 4 public static void main(String[] args) { 5 // 需求:使用for循环打印九九乘法口诀表 6 7 // 思路: 8 // 1、把没有遇见过的问题转换为遇见过的问题 9 // 2、只要把星号替换为算术表达式即可10 // 3、使用"\t"实现制表符的效果11 12 System.out.println("-----九九乘法口诀表-----");13 14 for (int i = 1; i <= 9; i++) {15 for (int j = 1; j <= i; j++) {16 // System.out.print("*" + "\t");17 System.out.print(j + "*" + i + "=" + (i * j) + "\t");18 }19 // 换行20 System.out.println();21 }22 }23 }
1 package cn.temptation; 2 3 public class Sample20 { 4 public static void main(String[] args) { 5 // break语句 6 // 1、switch语句中,结合case条件 或是 default语句,起的是跳出选择结构的作用 7 // 2、break用在循环中,起的跳出循环结构的作用,在某次循环执行过程中执行到break语句后跳出了循环,break之后的语句是执行不到的 8 9 // int i = 2;10 11 // switch (i) {12 // case 1:13 // System.out.println("i的值为1");14 // break;15 // case 2:16 // System.out.println("i的值为2");17 // break;18 // default:19 // break;20 // }21 22 // while (i < 5) {23 // System.out.println(i);24 // i++;25 // break;26 // // 语法错误:Unreachable code27 // System.out.println("这是break语句之后的语句");28 // }29 30 // Dead Code 描述右步长部分为死代码31 // 再次从侧面证明了右步长是在循环体内的语句执行结束后去执行的32 for (int j = 0; j < 3; j++) {33 System.out.println(j);34 break;35 // 语法错误:Unreachable code36 // System.out.println("这是break语句之后的语句");37 }38 39 // 注意:下句也是break语句后的语句,但是不受break语句的影响,因为break语句是for循环中的语句,是跳出循环的操作40 System.out.println("如果看到这句,说明循环结束了");41 }42 }
1 package cn.temptation; 2 3 public class Sample21 { 4 public static void main(String[] args) { 5 // continue语句 6 // 1、continue语句不能用在循环以外的结构中 7 // 2、循环中的continue语句之后的语句会提示语法错误:无法到达的代码 8 // 3、continue语句表示跳出当前当次循环 9 10 int i = 2;11 12 if (i == 3) {13 System.out.println("i等于3");14 // 语法错误:continue cannot be used outside of a loop15 // continue;16 }17 18 // while (i < 5) {19 // System.out.println(i);20 // continue;21 // // 语法错误:Unreachable code22 //// System.out.println("continue语句之后的语句");23 // }24 25 // for (int j = 0; j < 5; j++) {26 // if (j == 2) {27 // continue;28 // }29 // System.out.println(j);30 // }31 32 // 对比break语句 和 continue语句的效果33 // 结论:break语句跳出循环(后续循环条件满足也不执行了);continue语句跳出当前当次循环34 for (int j = 0; j < 5; j++) {35 if (j == 2) {36 break;37 }38 System.out.println(j);39 }40 }41 }
1 package cn.temptation; 2 3 public class Sample22 { 4 public static void main(String[] args) { 5 // 循环中死循环写法的总结 6 7 // while (true) { 8 // System.out.println("while死循环的写法"); 9 // }10 11 // do {12 // System.out.println("do...while死循环的写法");13 // } while (true);14 15 // for (;;) {16 // System.out.println("for死循环的写法");17 // }18 19 // 根据while 和 for 死循环的写法,稍作变形,侧面证明while结构 和 for结构是一样的20 int i = 2;21 22 // while (i < 5) {23 // System.out.println(i);24 // i++;25 // }26 27 for (; i < 5;) {28 System.out.println(i);29 i++;30 }31 }32 }
【原】Java学习笔记007 - 流程控制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。