控制语句
分为顺序、选择和循环
顺序结构
先执行a,再执行b
条件判断结构
如果......则.......
循环结构
如果.....则重复执行
条件判断结构(选择结构)
if单分支结构
语法结构:
if(布尔表达式){
语句块
}
注:如果if后不跟花括号{},只能作用域第一条语句。
前言:
Math类的使用
Math.random()用于产生0~1之间的double类型的随机数,但不包括1
int i = (int)(6 * Math.random()); //产生[0,5]之间的随机整数
掷骰子游戏
/*** 掷骰子游戏* 游戏规则:* 1.如果三次的值加起来大于15,则输出 手气不错哦 ^.^* 2.如果三次的值之和10~15之间,输出 手气一般哦 ~.~* 3.如果三次得值之和小于10,输出 手气好差 =.=* */ public class game {public static void main(String[] args){int i =(int) (Math.random() * 6 + 1);int j =(int) (Math.random() * 6 + 1);int k =(int) (Math.random() * 6 + 1);int count = i + j + k;System.out.println("first score: " + i);System.out.println("first score: " + j);System.out.println("first score: " + k); if(count > 15){System.out.println("手气不错哦 ^.^,再来一次波!");}if(count >= 10 && count < 15){System.out.println("手气一般哦 ~.~,再接再厉!");}if(count < 10){System.out.println("手气好差 =.=,溜溜球咯~");}System.out.println("今天总得分:" + count);} }
结果随机:
if-else双分支结构
语法结构:
if(布尔表达式){
语句块1
}else{
语句块2
}
public class TestIf02 {public static void main(String[] args) {double r = 4 * Math.random();double area = 3.14 * r * r;double circle = 2 * Math.PI * r; System.out.println("半径:" + r);System.out.println("周长:" + area);System.out.println("面积:" +circle); if(area > circle){System.out.println("周长比面积小");}else{System.out.println("周长比面积大");}} }
if-else与条件运算符效果相似:
//条件运算符int a = 3 ,b =5;int c = a > b ? a:b;System.out.println(c);//等同于if-else:if(a > b){c = a;}else{c = b;}System.out.println(c);
if-else if-else多分支结构
语法结构:
if(布尔表达式1){
语句块1
}else if(布尔表达式2){
语句块2
}......
else if(布尔表达式n){
语句块n
}else{
......
}
相对于if单分支更简洁方便
年龄判定
/*** 年龄判定* 游戏规则:* 1.15岁以下(不包括15):儿童* 2.15~24:青年* 3.25~44:中年* 4.45~65:中老年* 5.66~90:老年* 6.91~99:老寿星* 7.100~109:百岁老人* 8.110以上:好小汁!!不死神仙!* */ public class TestIf03 {public static void main(String[] args){int age = (int)(100 * Math.random());System.out.println(age); if(age < 15){System.out.println("儿童");}else if(age < 25){System.out.println("青年");}else if(age < 44){System.out.println("中年");}else if(age < 65){System.out.println("中老年");}else if(age < 90){System.out.println("老年");}else if (age < 100){System.out.println("老寿星");} else if (age < 109){System.out.println("百岁老人");}else{System.out.println("好小汁!!不死神仙!");}} }
switch分支结构
语法结构:(多值判断)
switch(表达式){
case 值1:
语句块1;
break;
case 值2:
语句块2;
break;
.............
default:
默认语句块;
}
注:
-
switch会根据表达式的值从相匹配的case标签处开始执行,一直执行到break处或switch的末尾,如果表达式的值与任一case值不匹配,则进入default语句
-
switch中表达式的值是int(byte、short、char都可,long不行)、枚举、字符串
随机年级
//switch实现: public class TestSwitch {public static void main(String[] args) {int grade = (int)(Math.random() * 4);switch (grade){case 1:System.out.println("大一");break;case 2:System.out.println("大二");break;case 3:System.out.println("大三");break;default:System.out.println("大四");break; //可写可不写}} } //if-else if实现:if (grade == 1){System.out.println("大一");} else if (grade == 2) {System.out.println("大二");} else if (grade == 3) {System.out.println("大三");}else {System.out.println("大四");}
判断月份属于某个季节
public class TestSwitch01 {public static void main(String[] args) {int month = (int)(Math.random() * 12 +1);//if-else if实现if(month == 3 || month == 4 || month == 5){System.out.println("春天来咯~ ^.^");} else if (month == 6 || month == 7 || month == 8) {System.out.println("是夏天!( •̀ ω •́ )!");} else if (month == 9 || month == 10 || month == 11) {System.out.println("好冷>.<,冬天到了");} else {System.out.println("秋天,看枫叶🍁");} //switch实现:switch (month){case 3:case 4:case 5:System.out.println("春天来咯~ ^.^");break;case 6:case 7:case 8:System.out.println("是夏天!( •̀ ω •́ )!");break;case 9:case 10:case 11:System.out.println("好冷>.<,冬天到了");break;default:System.out.println("秋天,看枫叶🍁");break;}} }
循环结构
-
当型:当布尔表达式为true时,反复执行语句,为false才停止执行,eg: while和for循环
-
直到型:先执行某语句,再判断布尔表达式,为true再执行,反复执行,知道布尔表达式条件为false才停止循环,eg: do-while循环
while循环
语法结构:
while(布尔表达式){
循环体;
}
-
在循环刚开始时,会计算一次"布尔表达式的"的值,条件为真,执行循环体,对于后来每一次额外的循环,都会在开始前重新计算一次
-
语句中应有使循环趋向于结束的语句,否则会无限循环---"死循环"
//求累加和:从1加到100int b = 1;int sum = 0;while(b < 101){sum += b;b++;}System.out.println(sum);
for循环
语法结构:
for(初始表达式;布尔表达式;迭代因子){
循环体;
}
-
初始化部分设置:循环变量的初值
-
条件判断部分:布尔表达式
-
迭代因子:控制循环变量的增减
求累加和
public class TestFor {public static void main(String[] args) {for(int a = 0;a < 6;a++){System.out.println("I Love U!❤");}int sum = 0;for(int n = 0;n <= 100;n++){sum = sum +n;}System.out.println(sum);// 输出9~0之间的数for(int b = 9;b >= 0;b--){System.out.println(b + "\t");}System.out.println(); // 换行// 输出90~1之间能被3整除的数for(int c = 90;c >=0;c--){if(c % 3 == 0){System.out.println(c + "\t");}}} }
do-while循环
语法结构:
do{
循环体;
}while(布尔表达式);
先执行再判断
求累加和
public class TestDoWhile {public static void main(String[] args) {int i = 0;int sum = 0;do{sum += i;i++;}while(i < 101); //注意分号不能省略System.out.println(sum);} }
while与do-while的区别
while:先判断再执行
do-while:先执行再判断,循环体至少被执行一次
练习1
-
求100以内总数和及奇偶数之和
public class TestOddEven {public static void main(String[] args) {int sum = 0;int oddsum = 0;int evensum = 0;for(int i = 0;i <= 100;i++){sum += i;if(i % 2 == 0){evensum += i;}else{oddsum += i;}}System.out.println(sum);System.out.println(oddsum);System.out.println(evensum);// while循环int i = 0;int sum2 = 0;int oddSum = 0;int evenSum = 0;while(i <= 100){sum2 += i;if(i % 2 == 0){evenSum += i;}else{oddSum += i;}i++;}System.out.println(sum2);System.out.println(oddSum);System.out.println(evenSum);} }
练习2
-
使用while/for循环0~130之间的数字,每行显示5个数字
public class TestDisplay {public static void main(String[] args) {// while 循环实现int n = 0;int count = 0;while(n <= 130){// 换行实现if(n % 5 == 0){System.out.println();}System.out.print(n + "\t");n++;// 计数器实现System.out.print(n);count ++;if(count == 5) {System.out.println();count = 0;}n++;}// for循环实现for(int a = 0;a <= 130;a++){if(a % 5 == 0){System.out.println();}System.out.print(a + "\t");}} }
嵌套循环
循环语句内部,再写一个或多个循环,称为循环嵌套。一般是两层
练习3
打印多行,第一行对应的数字为1,第2行为2.....以此类推
public class TestLoop {public static void main(String[] args) {for(int a = 0;a <= 5;a++) {for (int i = 1; i <= 5; i++) {System.out.print(a + "\t");}System.out.println();}} }
练习4
使用嵌套打印九九乘法表
for(int b = 1;b <= 9;b++) {for (int i = 1; i <= b; i++) {System.out.print(i + "*" + b + "=" + (i * b) + "\t"); // System.out.print(i + "*" + b + "=" + (i * b < 10 ?" "+(i * b):i * b) + "\t");// (i * b < 10 ?" "+(i * b):i * b) 个位数时在前面加一个空格,否则不加}System.out.println();}
练习5
使用嵌套循环输出五行*,一行5个
public class PrintStar {public static void main(String[] args) {for(int b = 0;b < 5;b++) {for (int i = 0; i < 5; i++) {System.out.print("*" + "\t");}System.out.println();}} }
练习6
使用嵌套循环交替打印"#"、"*",一行5个
public class PrintStar02 {public static void main(String[] args) {// 循环嵌套实现for (int b = 0; b < 5; b++) {for (int i = 0; i < 5; i++) {if ((b + i) % 2 == 0) {System.out.print("*" + "\t");} else {System.out.print("#" + "\t");}}System.out.println();}// 计数器实现int counter = 0; // 计数器,用于交替打印字符for (int i = 0; i < 5; i++) { // 外层循环,控制行数for (int j = 0; j < 5; j++) { // 内层循环,控制每行的字符数if (counter % 2 == 0) {System.out.print("*\t"); // 当计数器为偶数时打印*} else {System.out.print("#\t"); // 当计数器为奇数时打印#}counter++; // 每次打印一个字符后,计数器加1}System.out.println(); // 每打印完一行后换行}} }
break语句和continue语句
-
break用于强制退出整个循环
-
continue用于结束本次循环,继续下一次
练习7
产生100以内的随机数,直到随机数为99时停止
public class TestBreak {public static void main(String[] args) {int total = 0; // 循环的总次数while(true) {total ++;int n = (int) (Math.random() * 101);System.out.println(n);if(n == 99) {break;}}System.out.print("循环次数:"+total);} }
练习8
输出100~150内不能被3整除的数,且每行输出5个
public class TestContinue {public static void main(String[] args) {int count = 0;for(int n = 100;n <= 150;n++) { /* if(n % 3 != 0){System.out.print(n+"\t");}*/// continue:if(n % 3 == 0){continue;}System.out.print(n+"\t");count++;if(count == 5){System.out.println();count = 0;}}}}
带标签的continue语句
练习9
控制嵌套循环跳转(打印101~150之间所有的质数)
public class TestContinueLabel {public static void main(String[] args) {outer:for(int n = 101;n <= 150;n++){for(int i = 2; i < n;i++){if(n % i == 0){ // 余数为0就不用算,它不是质数continue outer; // 符合某条件,跳到外部循环继续}}System.out.print(n+"\t");}} }
年薪计算器
-
通过键盘输入用户的月薪,每年是几个月薪水
-
输出用户的薪水
-
输出一行字:"如果年薪超过10万,恭喜你超越90%的人!",如果年薪超过20万,"恭喜你超过98%的人!"
-
直到键盘输入数字88,退出程序(break实现)
-
键盘输入66,则这个用户退出计算不显示"恭喜...",直接显示"重新开计算...",然后计算下一个用户的年薪
import java.util.Scanner;public class SalaryCalculate {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("**********年薪计算器***********");System.out.println("·输入88退出程序\n·输入66,计算下一位年薪\n");while(true){System.out.println("请输入您的月薪:");long salary = scanner.nextInt();System.out.println("请输入您的月份:");int month = scanner.nextInt();long yearSalary = salary * month;System.out.println("您的年薪是:" + yearSalary);if(yearSalary >= 200000){System.out.println("恭喜你超越98%的人!");}else if(yearSalary >= 100000){System.out.println("恭喜你超越90%的人!");}else{System.out.println("要加油啦!!");}System.out.println("输入88退出系统,输入66继续计算!");int command = scanner.nextInt();if(command == 88){System.out.println("系统退出!");break;}else if(command == 66){System.out.println("重新开始计算年薪");continue;}}} }
个税计算器
-
通过键盘输入用户的月薪
-
百度搜索个税计算方式,计算出应缴纳的税款
-
直到键盘输入88,退出程序
级数 | 应纳税所得额 | 税率(%) | 速算扣除数 |
---|---|---|---|
1 | 不超过3000元的部分 | 3 | 0 |
2 | 3000~12000的部分 | 10 | 210 |
3 | 12000~25000的部分 | 20 | 1410 |
4 | 25000~35000的部分 | 25 | 2660 |
5 | 35000~55000的部分 | 30 | 4410 |
6 | 55000~80000的部分 | 35 | 7160 |
7 | 超过80000的部分 | 45 | 15160 |
import java.util.Scanner; public class TaxCalculate {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("***********个税计算器**********");System.out.println("输入88退出程序"); while(true){System.out.println("请输入您的月薪:");double monthSalary = scanner.nextDouble();double jiaoTax = monthSalary - 5000;double taxRate = 0; if(monthSalary < 5000){System.out.println("个税起征点为5000,您不需要交税!");}else if(jiaoTax <= 3000){taxRate = jiaoTax * 0.03;monthSalary = monthSalary - taxRate;}else if(jiaoTax > 3000 && jiaoTax <= 12000){taxRate = jiaoTax * 0.1 - 210;monthSalary = monthSalary - taxRate;}else if(jiaoTax > 12000 && jiaoTax <= 25000){taxRate = jiaoTax * 0.2 - 1410;monthSalary = monthSalary - taxRate;}else if(jiaoTax > 25000 && jiaoTax <= 35000){taxRate = jiaoTax * 0.25 - 2660;monthSalary = monthSalary - taxRate;}else if(jiaoTax > 35000 && jiaoTax <= 55000){taxRate = jiaoTax * 0.3 - 4410;monthSalary = monthSalary - taxRate;}else if(jiaoTax > 55000 && jiaoTax <= 80000){taxRate = jiaoTax * 0.35 - 7610;monthSalary = monthSalary - taxRate;}else{taxRate = jiaoTax * 0.45 - 15160;monthSalary = monthSalary - taxRate;}System.out.println("个人应纳所得税:" + taxRate);System.out.println("您的月工资最终是:" + monthSalary); System.out.println("输入88退出程序.\n输入66继续计算下一位个税及月工资");int command = scanner.nextInt();if(command == 88){System.out.println("程序终止!");break;}else if(command == 66){System.out.println("请继续输入您的月薪:");continue;}}} }