控制语句
分为顺序、选择和循环
顺序结构
先执行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加到100 int 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; } } } }