案例一:买飞机票
题目
用户购买机票时,机票原价会按照淡季、旺季,头等舱还是经济舱的情况进行相应的优惠,优惠方案如下:5-10月为旺季,头等舱9折,经济舱8.5折。11月到来年4月为淡季,头等舱7折,经济舱6.5折请开发程序计算出用户当前机票的优惠价。
分析
本节重点是对方法的练习,因此需要确定
1、方法是否需要接收数据?
2、方法是否需要返回数据
3、方法逻辑结构如何写呢?
第一个问题:我们需要接收机票原价、当前月份和仓位类型。
第二个问题:需要返回计算出的机票优惠价。
第三个问题:用if和switch组合即可
代码
public class Example_03 {
public static void main(String[] args) {
int month = 5;
double money = 547;
String type = "头等舱";
money = calPrice(money, month, type);
System.out.println("飞机票的优惠价为:" + money);
}
private static double calPrice(double money, int month, String type) {
// 旺季
if (month <= 10 && month >= 5) {
switch (type) {
case "头等舱":
money = money * 0.9;
break;
case "经济舱":
money = money * 0.85;
break;
}
} else {
// 淡季
switch (type) {
case "头等舱":
money = money * 0.7;
break;
case "经济舱":
money = money * 0.65;
break;
}
}
return money;
}
}
案例二:生成验证码
题目
在登陆时候一般需要填写验证码,验证码正确后才能进行登录,验证码一般包含数字和大小写字母。
分析
输入:生成验证码个数
输出:字符串类型的验证码
代码
import java.util.Random;
public class Example_03 {
public static void main(String[] args) {
int len = 4;
String code = getCode(len);
System.out.println("生成的验证码为:" + code);
}
private static String getCode(int len) {
Random r = new Random();
String code = "";
for (int i = 0; i < len; i++) {
int type = r.nextInt(3);
switch (type){
case 0:
code += r.nextInt(10);
break;
case 1:
// A - Z : 65 + 25
code += (char) (r.nextInt(25) + 65);
break;
case 2:
// a - z : 97 + 25
code += (char) (r.nextInt(25) + 97);
break;
}
}
return code;
}
}
案例三:评委打分
题目
某歌唱比赛,需要开发一个系统:可以录入 � 个评委的打分,录入完毕,去掉最大值和最小值后计算平均分作为选手得分。
分析
1、评委的分数是后期录入的,一开始不知道具体分数,因此需要定义一个动态数组。 2、由于分数是手动录入的,因此需要使用Scanner读取评分。
代码
import java.text.DecimalFormat;
import java.util.Scanner;
public class Example_03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入评委的人数:");
int n = sc.nextInt();
double[] scores = new double[n];
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i + 1) + "个评委的评分:");
scores[i] = sc.nextDouble();
}
getScore(scores);
}
private static void getScore(double[] scores) {
double max = scores[0];
int indexMax = 0;
for (int i = 1; i < scores.length; i++) {
if (scores[i] > max ){
max = scores[i];
indexMax = i;
}
}
double min = scores[0];
int indexMin = 0;
for (int i = 1; i < scores.length; i++) {
if (scores[i] < min ){
min = scores[i];
indexMin = i;
}
}
int sum = 0;
for (int i = 0; i < scores.length; i++) {
if (i == indexMax || i == indexMin) {
continue;
}
sum += scores[i];
}
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(sum/(scores.length-2)));
// return df.format(sum/(scores.length-2));
}
}
案例四:发红包
案例
过年微信群里面发起了抢红包活动,分别有:9、666、188、520、99999五个红包。请模拟其他人来抽奖,按照先来先得,随机抽取,抽完即止,注意:一个红包只能被抽一次,先抽或后抽哪一个红包是随机的,示例如下(不一定是下面的顺序)
分析
1、如何确保每个红包只能抽一次;
2、如何保证随机抽取;
3、如何确保抽完后结束活动。
其实很简单,只需要将数组随机打乱就行了,然后一次输出即可。
代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Example_03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入抽取红包的个数:");
int n = sc.nextInt();
ArrayList<Integer> redBug = new ArrayList<>();
for (int i = 0; i < n; i++) {
System.out.println("请输入第" + (i+1) + "个红包的金额");
redBug.add(sc.nextInt());
}
// 打乱数组顺序
Collections.shuffle(redBug);
int num = 0;
while (++num <= n){
System.out.print("请输按任意键获取红包:");
sc.next();
System.out.println("你获得的红包金额为:" + redBug.get(num-1));
}
System.out.println("红包领取完毕!");
}
}
希望多点赞收藏关注,评论或私信交流!~