活动地址:CSDN21天学习挑战赛
目录
案例1:买飞机票
需求:
⚫ 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
⚫ 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
分析:
⚫ 定义一个方法可以进行键盘录入机票原价、月份和机舱类型。
⚫ 使用if判断月份是是旺季还是淡季,使用switch分支判断是头等舱还是经济舱。
⚫ 选择对应的折扣进行计算并返回计算的结果。
代码
public static void main(String[] args) {
buyair();
}
public static void buyair(){
System.out.print("请输入飞机原票价:");
double d = in.nextDouble();
System.out.print("请输入月份:");
int month = in.nextInt();
while(month>12||month<0){
System.out.print("输入错误重新输入:");
month = in.nextInt();
}
System.out.print("请输入你的飞机舱:(1/头等舱 2/经济舱)");
int num = in.nextInt();
while(num!=1&&num!=2){
System.out.print("输入错误重新输入:");
num = in.nextInt();
}
if(month>=5&&month<=10){
switch (num){
case 1:
d*=0.9;
break;
case 2:
d*=0.85;
break;
}
}else{
switch (num){
case 1:
d*=0.7;
break;
case 2:
d*=0.65;
break;
}
}
System.out.println("你需要支付的飞机票价是:"+d);
}
运行结果:
请输入飞机原票价:1000 请输入月份:2 请输入你的飞机舱:1/头等舱 2/经济舱1 你需要支付的飞机票价是:700.0
请输入飞机原票价:1000 请输入月份:14 输入错误重新输入3 请输入你的飞机舱:1/头等舱 2/经济舱3 输入错误重新输入1 你需要支付的飞机票价是:700.0
案例2:找素数
说明
素数:如果除了1和它本身以外,不能被其他正整数整除,就叫素数。
分析
⚫ 101-200之间的数据可以采用循环依次拿到; 每拿到一个数,判断该数是否是素数。
⚫ 判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,
public static void findprime(){
System.out.print("在101到200中素数有:");
for (int i=101;i<200;i++){
boolean flag = false;
for(int j=2;j<i/2;j++){
if(i%j==0){
flag = true;
break;
}
}
if(flag == false){
System.out.print(i+" ");
}
}
}
运行结果:
在101到200中素数有:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
案例3:开发验证码
需求:
⚫ 定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
分析:
① 定义一个方法,生成验证码返回:方法参数是位数、方法的返回值类型是String。
② 在方法内部使用for循环生成指定位数的随机字符,并连接起来。
③ 把连接好的随机字符作为一组验证码进行返回
public static String code(int a){
String code = "";
Random r = new Random();
// String code1 = "";
// String in = "0123456789";
// String c = "abcdefghijklmnopqrstuvwsyz";
// String C = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// for(int i=1;i<=5;i++){
// int dr=r.nextInt(3);
// switch (dr){
// case 0:
// int j = r.nextInt(in.length());
// code+=in.charAt(j);
// break;
// case 1:
// j = r.nextInt(c.length());
// code+=c.charAt(j);
// break;
// case 2:
// j = r.nextInt(C.length());
// code+=C.charAt(j);
// break;
// }
// }
String randString = "0123456789abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for(int i=1;i<=a;i++){
code+=randString.charAt(r.nextInt(randString.length()));
}
return code;
}
俩个方法,下面是注释部分的的压缩版
带入参数5
运行结果:3yz5G
案例4:数组元素的复制
需求:
⚫ 把一个数组中的元素复制到另一个新数组中去。
分析:
⚫ 需要动态初始化一个数组,长度与原数组一样。
⚫ 遍历原数组的每个元素,依次赋值给新数组。
⚫ 输出两个数组的内容。
public static void copy(){
char[] a = {'a','b','c','d','e','f','g'};
char[] c = new char[a.length];
for(int i=0;i<a.length;i++){
c[i]=a[i];
}
System.out.println(a);
System.out.println(c);
}
运行结果:
abcdefg abcdefg
案例5:评委打分案例
需求 :
在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最
高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
分析:
① 把6个评委的分数录入到程序中去 ----> 使用数组 int[] scores = new int[6]
② 遍历数组中每个数据,进行累加求和,并找出最高分、最低分。
③ 按照分数的计算规则算出平均分
public static void score(){
int[] scores = new int[6];
int max=0,min=0,avg=0;
for (int i = 0; i < scores.length; i++) {
System.out.print("(分数范围0--100)请输入第"+(i+1)+"位评委的评分:");
scores[i]=in.nextInt();
while (scores[i]>100||scores[i]<0){
System.out.print("分数范围错误(分数范围0--100)请第"+(i+1)+"位评委重新输入评分:");
scores[i]=in.nextInt();
}
}
max=min=avg=scores[0];
for (int i = 1; i < scores.length; i++) {
avg+=scores[i];
if(scores[i]>max){
max=scores[i];
}
if(scores[i]<min){
min = scores[i];
}
}
avg=(avg-max-min)/4;
System.out.println("最高分"+max+"最低分"+min+"平均分"+avg);
}
运行结果:
(分数范围0--100)请输入第1位评委的评分:101 分数范围错误(分数范围0--100)请第1位评委重新输入评分:1 (分数范围0--100)请输入第2位评委的评分:2 (分数范围0--100)请输入第3位评委的评分:-3 分数范围错误(分数范围0--100)请第3位评委重新输入评分:3 (分数范围0--100)请输入第4位评委的评分:4 (分数范围0--100)请输入第5位评委的评分:5 (分数范围0--100)请输入第6位评委的评分:6 最高分6最低分1平均分3
案例6:数字加密
需求:
⚫ 某系统的数字密码,比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上
5 , 再对10求余,最后将所有数字反转,得到一串新数。
分析
⚫ 把每个数据存放到字符串中,遍历字符串,将每一个字符按照加密原则加密,得到加密后的字符串。
⚫ 将加密后的字符串逆序遍历,然后取字符加到原来的,或者新创建的字符串里面,如果用原来的,取从中间断开后面一半的数据。
public static void encryption(int a){
String str = "";
for (int i=0;i<(a+"").length();i++){
int b = (a+"").charAt(i)-43;
str+=b%=10;
}
for (int i = str.length()-1; i >=0; i--) {
str+=str.charAt(i);
}
str=str.substring(str.length()/2,str.length());
System.out.println(str);
}
方法带入参数1983
运行结果:8346
案例7:抢红包
需求:
一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,
打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
例如: 888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出
分析
⚫ 定义一个数组用于存储这些奖金金额。
⚫ 定义一个字符串用于记录已经抽到的金额。
⚫ 每次抽奖都随机一个索引,取出索引在字符串中寻找。抽中过从新抽一次。
public static void grab(){
int[] a = {2, 588 , 888, 1000, 10000};
String str="";
while(str.length()!=a.length){
int j = r.nextInt(a.length);
if (str.indexOf(j+"")==-1){
str+=j;
System.out.println(a[j]+"元的奖金被抽出");
}
}
}
运行结果;
1000元的奖金被抽出 2元的奖金被抽出 588元的奖金被抽出 10000元的奖金被抽出 888元的奖金被抽出