活动已经进行了一周,中间流程控制模块我并没有记录,昨天和今天就写了一些案例,通过实际例子来复习了基本的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)));