前言
(二):使用运算符操作定义好的变量进行运算。(运算符)
一、条件判断语句
Java中有3中格式的分支判断语句。
1.if 条件分支
如果程序中存在多个独立的 if条件判断语句,程序执行过程中都会判断,如果条件全部满足分支都会执行。
int a = 100, b = 200, c = 199; int max = a, min = a; //如果程序中存在多个独立的if条件语句,那么分支判断都会依次执行。 //1.先比较出A和B两个数字,哪个大?哪个小? if (a > b) { max = a; min = b; } //2.如果C比当前最大数字的还大,最后最大的就是C if (max < c) { max = c; } //3.如果C比当前最大的小,就让C和当前最小的比较 if (min > c) { min = c; } System.out.println("最大值: " + max + " 最小值:" + min); }
2.if...else分支
非黑即白,只会执行1个分支,如果条件全部满足,则选择最近的1个分支执行。
//非黑即白判断奇偶数 int a = -11; if (a % 2 == 0) { System.out.println(a + "是偶数"); } else { System.out.println(a + "是奇数"); }
3.if...else if...else if 分支
可以进行多条件判断,最终只会执行1个分支,如果条件全部满足,则选择最近的1个分支执行。
int a = 10; if (a == 10) { System.out.println("a等于0"); } else if (a > 10) { System.out.println("a大于10"); } else if (a < 10) { System.out.println("a小于于10"); } else { System.out.println("其他"); }
4.Switch分支
case后面用于匹配的项。只能跟常量值,不能是变量。
package process_control; import java.util.Scanner; public class TestSwitch { public static void main(String[] args) { System.out.print("请输入今天是周几: "); Scanner sc = new Scanner(System.in); int number = sc.nextInt(); if (number == 1) { System.out.println("今天是周一"); } else if (number == 2) { System.out.println("今天是周二"); } else if (number == 3) { System.out.println("今天是周三"); } else if (number == 4) { System.out.println("今天是周四"); } else if (number == 5) { System.out.println("今天是周五"); } else if (number == 6) { System.out.println("今天是周六"); } else if (number == 7) { System.out.println("今天是周日"); } else { System.out.println("输入无效"); } //如果switch的case中没有写break,会出现case穿透现象; //1个case匹配成功之后,依然会执行后面的case的代码; switch (number) { case 1: System.out.println("周一"); break; case 2: System.out.println("周二"); break; case 3: System.out.println("周三"); break; case 4: System.out.println("周四"); break; case 5: System.out.println("周五"); break; case 6: System.out.println("周六"); break; case 7: System.out.println("周日"); break; default: System.out.println("无效"); break; } //我们可以利用case穿透现象 switch (number) { case 1: case 2: case 3: System.out.println("第1季度"); break; case 4: case 5: case 6: System.out.println("第2季度"); break; case 7: case 8: case 9: System.out.println("第3季度"); break; case 10: case 11: case 12: System.out.println("第4季度"); break; } } }
5.Java三元运算符
三元运算符也可以实现流程控制,其功能等同于if...eles..条件判断语句。
//1.定义两只老虎的体重 int tigerOneWeight = 250, tigerTwoWeight = 170; //1.求两只老虎的最大体重? int maxTigerWeight = tigerOneWeight > tigerTwoWeight ? tigerOneWeight : tigerTwoWeight; System.out.println(maxTigerWeight); //2.求两只老虎的最小体重? int minTigerWeight = tigerTwoWeight < tigerOneWeight ? tigerTwoWeight : tigerOneWeight; System.out.println(minTigerWeight);
二、循环语句
在Java中可以通过 for、while和do while 3种循环,控制代码重复执行;
1.while和do...while循环
即便是while中条件不成立,do while循环也会先执行1次do代码块;
package process_control; public class TestWhile { public static void main(String[] args) { int i = 0; while (i <= 100) { System.out.println(i); i++; } /* while循环和do...while循环的区别 do while循环就是while循环反着写, 但是do while循环,会先执行再判断.... while循环是先判断,再执行..... 所以即便是while中条件不成立,do while循环也会先执行do */ int i2 = 0; do { System.out.printf("i2--%s\n", i2); i2++; } while (i2 <= 100); } }
2.for循环
for循环的本质就是数数,for循环结合容器数据类型的索引进行数据的获取和赋值操作。
A.正常for循环
//1.打印所有水仙花数,并且打印水仙花的个数。 int count = 0; for (int i = 100; i <= 999; i++) { int b = i / 100 % 10; //百位数 int s = i / 10 % 10; //十位数 int g = i % 10; //个位数 //2.百位/十位/个位数获取到之后,进行立方求和求和操作=当前三位数就是水仙花数。 int result = b * b * b + s * s * s + g * g * g; if (result == i) { System.out.println(i); count += 1; } } System.out.println(count);
B.死循环
package process_control; public class TestFor { public static void main(String[] args) { for (int i = 10; i > 0; i--) { System.out.println(i); } //死循环 for (; ; ) { for (int i = 0; i < 100; i++) { System.out.println("Hi,Helloween."); } } } }
C.For循环嵌套
在一个for循环中可以嵌套另一个for循环(外循环执行1次,内循环整体执行1次);
For循环嵌套就像表里中时间指针, 秒针转60次之后分针才转1次,分针转60次之后时针才转1次。
public class ForDemo2 { public static void main(String[] args) { for (int i = 0; i < 24; i++) { for (int j = 0; j < 60; j++) { for (int k = 0; k < 60; k++) { System.out.println(i + "时" + j + "分" + k + "秒"); } } } }
D.复杂格式for循环
public class ForDemo4 { public static void main(String[] args) { //反转数组中的索引元素 int[] intArray = new int[]{89, 34, 9, 13, 56}; System.out.println(Arrays.toString(intArray)); //复制格式的for循环 for (int start = 0, end = intArray.length - 1; start < end; start++, end--) { int temp = intArray[start]; intArray[start] = intArray[end]; intArray[end] = temp; } System.out.println(Arrays.toString(intArray)); } }
E.百钱百鸡
package com.itheima.process; //100钱买100只百鸡: //现有100元要买100只鸡,公鸡价格5元/只,母鸡价格3元/只,小鸡3只1块钱,使用100块钱去买100只鸡,总共有多少种买法? //穷举上限思想去实现:把现在已有的下限和上限全部规定出来,然后在已有下限和上限范围之中进行判断: // 100块钱最多能买20只公鸡 // 100块钱最多能买33只母鸡 //购买小鸡数量=总共买100只鸡-20只公鸡-33母鸡 public class ForDemo3 { public static void main(String[] args) { int totalCount = 100; int totalCost = 100; for (int cookCount = 0; cookCount <= 20; cookCount++) { for (int henCount = 0; henCount <= 33; henCount++) { //在每次循环中计算小鸡的数量=总共买100只鸡-coke-hen int chickCount = totalCount - cookCount - henCount; //条件不仅要限制买鸡的数量,也要满足一共花费100块钱 if (chickCount % 3 == 0 && cookCount * 5 + henCount * 3 + chickCount / 3 == totalCost) { System.out.println("公鸡:" + cookCount + " 母鸡:" + henCount + " 小鸡:" + chickCount); } } } } /* *程序运行结果: * 公鸡0 母鸡25 小鸡75 公鸡4 母鸡18 小鸡78 公鸡8 母鸡11 小鸡81 公鸡12 母鸡4 小鸡84 * * */ }
F.不死神兔
/* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子; 假如兔子都不死,问第二十个月的兔子对数为多少? 从第三个月开始,每个兔子对数都是前两个月对数之和。 F(n)=F(n - 1)+F(n - 2) 斐波那契数列(思考思考) */ public static void main(String[] args) { int[] rabbitCountArray = new int[20]; rabbitCountArray[0] = 1; rabbitCountArray[1] = 1; //3个月开始每个月都生一对兔子 for (int i = 2; i < rabbitCountArray.length; i++) { rabbitCountArray[i] = rabbitCountArray[i - 1] + rabbitCountArray[i - 2]; } System.out.println(Arrays.toString(rabbitCountArray)); //[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765] }
3.for和while循环的区别?
如果可以明确循环次数,使用for循环。
如果不可以明确循环次数,使用while循环。
例如以下需求可以使用while循环。
public static void main(String[] args) { //珠峰高度8844430毫米 int zfHeight = 8844430; //一张纸的厚度0.1毫米 double paperHeight = 0.1; int foldCount = 0; while (zfHeight > paperHeight) { foldCount++; paperHeight *= 2; } System.out.println(foldCount); //27 一张足够的纸对折27次之后厚度就能超过珠峰!!! }
三、循环控制
和Python一样,Java可以在循环中使用break退出整个循环,使用continue跳过本次循环;
package process_control; public class TestBreak { public static void main(String[] args) { //1.continue:跳出本次循环 for (int i = 0; i < 10; i++) { if (i == 4) { continue; } System.out.println(i); } //2.break:终止整个循环 for (int i = 0; i < 10; i++) { if (i == 3) { System.out.println("程序退出!"); break; } System.out.printf("i--%d\n", i); } } }
参考