重识Java第四天打卡----基础案例

发布于:2022-08-07 ⋅ 阅读:(778) ⋅ 点赞:(0)

活动地址:CSDN21天学习挑战赛

 活动已经进行了一周,中间流程控制模块我并没有记录,昨天和今天就写了一些案例,通过实际例子来复习了基本的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 {
    //https://blog.csdn.net/IMWTJ123/article/details/83657166 这是一篇讲大小写字母转换的文章
    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大小写字母互相转换

参见大小写转换

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到