天天看點

重識Java第四天打卡----基礎案例

活動已經進行了一周,中間流程控制子產品我并沒有記錄,昨天和今天就寫了一些案例,通過實際例子來複習了基本的switch case等控制結構。      

一、買飛機票案例

1.案例背景

需求:

  • 機票價格按照淡季旺季、頭等艙和經濟艙收費、輸入機票原價、月份和頭等艙或經濟艙
  • 按照如下規則計算機票價格:旺季(5-10月)頭等艙9折,經濟艙8.5折,淡季(11月到來年4月)頭等艙7折,經濟艙6.5折。

分析如下:

  • 定義一個方法可以進行鍵盤錄入機票原價、月份和機艙
  • 使用if判斷月份是是旺季還是淡季,使用switch分支判斷是頭等艙還是經濟艙。
  • 選擇對應的折扣進行計算并傳回計算的結果

注意點:

  1. switch分支有以下注意事項:

    ① 表達式類型隻能是byte、short、int、char,JDK5開始支援枚舉,JDK7開始支援String,

    不支援double、float、long。

    ② case給出的值不允許重複,且隻能是字面量,不能是變量

    ③ 不要忘記寫break,否則會出現穿透現象

  2. 什麼是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循環生成指定位數的随機字元,并連接配接起來
  • 把連接配接好的随機字元作為一組驗證碼進行傳回。

注意點:

  1. 如何生成随機大小寫字母
  2. 如何進行判斷下一位要生成什麼類型

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)));      

2.Java大小寫字母互相轉換