天天看点

重识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大小写字母互相转换