JAVA基础 - 案例练习
一、前言
前面学了点基础,可以通过一些小案例巩固下基础
二、实例
package com.hello.base; import java.util.Random; import java.util.Scanner; public class CaseDemo { public static void main(String[] args) { //录入购买信息,调用方法得到最终结果 Scanner sc = new Scanner(System.in); System.out.println("机票原价"); double price = sc.nextDouble(); System.out.println("月份"); int month = sc.nextInt(); System.out.println("仓位类型(头等舱、经济舱)"); String type = sc.next(); double rs = calc(price,month,type); System.out.println("您当前购买机票的价格是:"+rs); //调用寻找素数 su(); System.out.print("\n"); //调用生成验证码的方法 String code = CreateCode(5); System.out.println("随机验证码:"+code); //调用元素复制方法 int [] arrc1 = {11,22,44}; int [] arrc2 = new int[arrc1.length]; copy(arrc1,arrc2);//此时已完成数组复制,如果想打印出来具体的值,需要再写一个方法 printArray(arrc1); printArray(arrc2); System.out.println("\n"); //调用计算评委得分 int [] arrs = new int[6];//定义一个动态初始化的数据,用于后期录入6个分数 Scanner scs = new Scanner(System.in); for(int i=0;i<arrs.length;i++){ System.out.println("请录入第"+(i+1)+"个分数"); int scores = scs.nextInt(); arrs[i] = scores;//把这个分数存入到数组对应的位置 } calcscore(arrs); } //打印复制元素的值的方法 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.print("]"); } /*案例一:买机票 1、机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱 2、按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折 注:遇到判断值匹配的时候使用switch分支结构实现;遇到判断区间范围的时候选择if分支结构实现 */ public static double calc(double money,int month,String type) { //判断月份是淡季还是旺季 if (month >= 5 && month <= 10) { //旺季 switch (type) { case "经济舱": money *= 0.85; break; case "头等舱": money *= 0.9; break; default: System.out.println("您输入的舱位不正确"); money = -1;//当前无法计算价格了 } } else if (month == 11 || month == 12 || month >= 1 && month <= 4) { //淡季 switch (type) { case "经济舱": money *= 0.65; break; case "头等舱": money *= 0.7; break; default: System.out.println("您输入的舱位不正确"); money = -1;//当前无法计算价格了 } } else { System.out.println("月份有问题"); money = -1; } return money; } /* 案例二:找素数(如果除了1和它本身以外,不能被其他正整数整除,就叫素数) */ public static void su(){ //定义一个循环,找到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; } } //根据判断的结果选择是否输出这个数据,是素数则输出 if(flag){ System.out.print(i+"\t"); } } } /* 案例三:开发验证码:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母 核心逻辑: 1、定义一个string类型的变量存储验证码字符 2、定义一个for循环,循环5次 3、随机生成0|1|2的数据,依次代表当前位置要生成数字|大写字母|小写字母 4、把0、1、2交给switch生成对应类型的随机字符,把字符交给string变量 5、循环结束后,返回string类型的变量即是所求的验证码结果。 */ public static String CreateCode(int n){ //定义一个字符串变量记录生成的随机字符 String code=""; Random r = new Random(); //定义一个for循环,循环n次,依次生成随机字符 for(int i=0;i<n;i++){ //生成一个随机字符,英文大写 小写 数字(0 1 2) int type = r.nextInt(3);//0 1 2 switch (type){ case 0: //大写字符(A 65 - Z 65+25) (0-25)+65 //注:A-Z对应的数字是65-90,生成随机数65-90的写法为nextInt(26)+65 //减加法 90-65=25,生成25个数即(0-26),括号里写26,外面+65,即随机数从65开始,至65+25=90结束 char ch = (char) (r.nextInt(26)+65); code +=ch; break; case 1: //小写字符(a 97 - z 97+25) (0-25)+97 char ch1 = (char) (r.nextInt(26)+97); code +=ch1; break; case 2: //数字字符 code += r.nextInt(10);//0-9 break; } } return code; } /* 案例四:数组元素复制:把一个数组中的元素复制到另一个新数组去 分析:1、需要动态初始化一个数组,长度与原数组一样;2、遍历原数组的每个元素,依次赋值给新数组;3、输出两个数组的内容 */ public static void copy(int arrc1[],int arrc2[]){ //完成元素的复制 for(int i=0;i<arrc1.length;i++){ arrc2[i]=arrc1[i]; } } /* 案例五:评委打分:有6名评委给选手打分,分数范围是[0-100]之间的整数,选手的最后得分为去掉最高分、最低分后的4个评委的平均分, 请完成上述过程并计算出选手的得分 分析:1、把6个评委的分数录入到程序中去---->使用数组 int[] scores = new int[6]; 2、遍历数组中每个数据,进行累加求和,并找出最高分、最低分 3、按照分数的计算规则算出平均分。 */ public static void calcscore(int[] arrs){ //遍历数组中的每个数据,找出最高分、最低分、总分 int max=arrs[0], min =arrs[0], sum=0; for (int i=0;i<arrs.length;i++){ if(arrs[i]>max){ max=arrs[i];//替换最大值变量存储的数据 } if(arrs[i]<min){ min=arrs[i];//替换最小值变量存储的数据 } sum +=arrs[i];// 统计总分 } System.out.println("最高分为:"+max); System.out.println("最低分为:"+min); double result = (sum-max-min)/(arrs.length-2); System.out.println("最终得分为:"+result); } }