案例一:买飞机票
需求:
机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
机票最终优惠价格的计算方案如下:旺季( 5-10 月)头等舱 9 折,经济舱 8.5 折,淡季( 11 月到来年 4 月)头等舱 7 折,经济舱 6.5 折。
分析:
键盘录入机票的原价,仓位类型,月份信息,调用方法返回机票最终的优惠价格。
方法内部应该先使用 if 分支判断月份是是旺季还是淡季,然后使用 switch 分支判断是头等舱还是经济舱。
选择对应的折扣进行计算并返回计算的结果,如果信息录入有误返回价位为 -1 元代表即可。
代码:
public class Exer {
public static void main(String[] args) {
//1、先让用户输入机票原价,月份,仓位信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入机票原价:");
double pirce = sc.nextDouble();
System.out.println("请输入月份(1-12):");
int month = sc.nextInt();
System.out.println("请选择仓位类型:");
String type = sc.next();
System.out.println("机票优惠后的价格为:" + calc(pirce,month,type));
}
//定义方法接受信息,统计优惠后的价格返回
public static double calc(double pirce, int month, String type) {
//判断用户选择的信息情况
if (month >= 5 && month <= 10) {
//旺季
switch (type) {
case "头等舱":
pirce *= 0.9;
break;
case "经济舱":
pirce *= 0.85;
break;
default:
System.out.println("您输入的仓位类型有误~");
pirce = -1;
}
}
else if (month == 11 || month == 12 || month >= 1 && month <= 4) {
//淡季
switch (type) {
case "头等舱":
pirce *= 0.7;
break;
case "经济舱":
pirce *= 0.65;
break;
default:
System.out.println("您输入的仓位类型有误~");
pirce = -1;
}
}
else {
System.out.println("您输入的月份有误~");
pirce = -1;
}
return pirce;
}
}
结果:
案例2:找素数
需求: 判断101-200之间有多少个素数,并输出所有素数
说明:除了1和它本身以外,不能被其他正整数整除,就叫素数。
分析:
101-200之间的数据可以采用循环依次拿到; 每拿到一个数,判断该数是否是素数。
判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,没有则是素数。
如果最终判定是素数,即可输出展示。
代码:
public class Exer {
public static void main(String[] args) {
//1、定义一个循环,找到101-200之间全部的数据
for (int i = 101; i < 200; i++) {
boolean flag = true;//一开始认为当前素数是素数
//判断当前遍历的这个数是否是素数
for (int j = 2; j < i / 2; j++) {
if(i % j == 0){
flag = false;
break;
}
}
//3、根据判定的结果选择是否输出这个数据,是素数则输出
if(flag){
System.out.print(i + "\t");
}
}
}
}
结果:
案例3:评委打分案例
需求 :
在唱歌比赛中,有 6 名评委给选手打分,分数范围是 [0 - 100] 之间的整数。选手的最后得分为:去掉最高分、最低分后的 4 个评委的平均分,请完成上述过程并计算出选手的得分。
分析:
把 6 个评委的分数录入到程序中去 ----> 使用数组
遍历数组中每个数据,进行累加求和,并找出最高分、最低分。
按照分数的计算规则算出平均分。
代码:
public class Exer {
public static void main(String[] args) {
//1、定义一个动态初始化数组,用于录入6个评委的分数
int[] scores = new int[6];
//2、输入6个评委的打分
Scanner sc = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i + 1) + "个评委的打分:");
scores[i] = sc.nextInt();
}
//3、遍历数组中的每个数据,找出最大值和最小值
int max = scores[0];
int min = scores[0];
int sum = 0;
for (int i = 0; i < scores.length; i++) {
if(scores[i] > max){
max = scores[i];
}
if(scores[i] < min){
min = scores[i];
}
sum += scores[i];
}
//4、统计平均分
double avg = (sum - max - min) * 1.0 / (scores.length - 2);
System.out.println("最终选手得分为:" +avg);
}
}
结果:
案例4:数字加密
需求:
某系统的数字密码:比如
1983
,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上
5 ,
再对
10
求余,最后将所有数字反转,得到一串新数。
分析:
将每位数据存入到数组中去,遍历数组每位数据按照规则进行更改,把更改后的数据从新存入到数组中。
将数组的前后元素进行交换,数组中的最终元素就是加密后的结果。
代码:
public class Exer6 {
public static void main(String[] args) {
/*
需求:
某系统的数字密码:比如1983,采用加密方式进行传输,规则如下:
先得到每位数,然后每位数都加上5,对10求余,最后将所有数字反转,得到一串新数。
*/
Scanner sc = new Scanner(System.in);
System.out.println("请您输入需要加密数字的个数:");
int length = sc.nextInt();
//1、定义一个数组存储需要加密的数据
int[] arr = new int[length];
//2、录入需要加密的数字
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入加密的第" + (i + 1) + "个数字:");
arr[i] = sc.nextInt();
}
//3、打印数组内容看一下
System.out.print("加密前:");
printArray(arr);
//4、加密
for (int i = 0; i < arr.length; i++) {
arr[i] = (arr[i] + 5) % 10;
}
//5、对加密的数组进行反转
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
//6、打印看加密后的数组
System.out.print("加密后:");
printArray(arr);
}
//定义方法实现打印数组
public static void printArray(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(i == arr.length - 1? arr[i] : arr[i] + ",");
}
System.out.println("]");
}
}
结果: