活動已經進行了一周,中間流程控制子產品我并沒有記錄,昨天和今天就寫了一些案例,通過實際例子來複習了基本的switch case等控制結構。
一、買飛機票案例
1.案例背景
需求:
- 機票價格按照淡季旺季、頭等艙和經濟艙收費、輸入機票原價、月份和頭等艙或經濟艙
- 按照如下規則計算機票價格:旺季(5-10月)頭等艙9折,經濟艙8.5折,淡季(11月到來年4月)頭等艙7折,經濟艙6.5折。
分析如下:
- 定義一個方法可以進行鍵盤錄入機票原價、月份和機艙
- 使用if判斷月份是是旺季還是淡季,使用switch分支判斷是頭等艙還是經濟艙。
- 選擇對應的折扣進行計算并傳回計算的結果
注意點:
-
switch分支有以下注意事項:
① 表達式類型隻能是byte、short、int、char,JDK5開始支援枚舉,JDK7開始支援String,
不支援double、float、long。
② case給出的值不允許重複,且隻能是字面量,不能是變量
③ 不要忘記寫break,否則會出現穿透現象
- 什麼是switch的穿透性?答:若代碼執行到沒有寫break的case塊,執行完後将直接進入下一個case塊執行代碼(而不會進行任何比對),直到遇到break才跳出分支
2.代碼實作
import java.util.Scanner;
public class BuyTicket {
public static double calPrice() {
Scanner scanner = new Scanner(System.in);
System.out.println("輸入機票原價:");
double initialPrice = scanner.nextInt(); //輸入機票原價
System.out.println("輸入目前月份[數字]:");
double month = scanner.nextInt(); //月份
System.out.println("輸入機艙類型:");
String type = scanner.next(); //機艙類型
double finalPrice = initialPrice;
if (5 <= month && month <= 10) { //旺季
switch (type) {
case "頭等艙":
finalPrice = initialPrice * 0.9;
break;
case "經濟艙":
finalPrice = initialPrice * 0.85;
break;
}
}else {
switch (type) {
case "頭等艙":
finalPrice = initialPrice * 0.7;
break;
case "經濟艙":
finalPrice = initialPrice * 0.65;
break;
}
}
return finalPrice;
}
public static void main(String[] args) {
double finalPrice = calPrice();
System.out.println("最終飛機票的價格為:"+finalPrice);
}
}
二、随機驗證碼案例
1.案例背景
需求:定義方法實作随機産生一個5位的驗證碼,每位可能是數字、大寫字母、小寫字母。
分析:
- 定義一個生成驗證碼方法,方法的傳回值類型是String
- 在方法内部使用for循環生成指定位數的随機字元,并連接配接起來
- 把連接配接好的随機字元作為一組驗證碼進行傳回。
注意點:
- 如何生成随機大小寫字母
- 如何進行判斷下一位要生成什麼類型
2.代碼實作
import java.util.Random;
public class MakeYZM {
//javascript:void(0) 這是一篇講大小寫字母轉換的文章
public static String getYZM(){
String str = "";
Random r = new Random();
for (int i = 0; i < 5; i++) {
switch (r.nextInt(3)){ //生成[1,3)的随機整數
case 0: // 0則輸出随機小寫字母
char a = (char)(int)(Math.random()*26+97);
// String chars = "abcdefghijklmnopqrstuvwxyz";
// System.out.println(chars.charAt((int)(Math.random() * 26)));
str = str + a;
break;
case 1: // 1則輸出随機大寫字母
char b = (char)(int)(Math.random()*26+65);
str = str + b;
break;
case 2:
int c = r.nextInt(9); //生成[0,9]的随機整數
str = str + c;
break;
}
}
return str;
}
public static void main(String[] args) {
String yzm = getYZM();
System.out.println("生成一個5位數二維碼:"+yzm);
}
}
三、拓展知識
1.Java生成随機字母的兩種方法
方法一:使用類型轉換,将int型直接轉換為字元型
//生成随機小寫字母
char a = (char)(int)(Math.random()*26+97);
//生成随機大寫字母
char b = (char)(int)(Math.random()*26+65);
//生成随機小寫字母,要選大寫,則把字元串中改為大寫即可
String chars = "abcdefghijklmnopqrstuvwxyz";
//Bigchars = chars.toUpperCase();即可轉為大寫字母
System.out.println(chars.charAt((int)(Math.random() * 26)));