目录
前言:
前言:
案例,就是人们在生产生活当中所经历的典型的富有多种意义的事件陈述。它是人们所经历的故事当中的有意截取。案例一般包括三大要素。案例对于人们的学习、研究、生活借鉴等具有重要意义。基于案例的教学是通过案例向人们传递有针对性的教育意义的有效载体。因此,人们常常把案例作为一种工具进行说服,进行思考,进行教育。故案例在人们的研究中形成了一定的书写格式、标准样式,为人们更好地适应案例情景提供很多方便。
案例1:买飞机票
需求:
1.机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
2.机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折;淡季(11月到第二年的4月)头等舱7折,经济舱6折。
分析:
①键盘录入机票的原价,仓位信息,月份信息,调用方法返回最终的优惠后价格。
②方法内部应该先使用if分支判断月份是旺季还是淡季,然后使用switch分支判断是头等舱还是经济舱。
import java.util.Scanner;
public class Test {
/*买飞机票
*/
public static void main(String[] args) {
//1.让用户输入机票的原价,仓位信息,月份信息
Scanner sc = new Scanner(System.in);
System.out.println("请您输入机票原价: ");
double money = sc.nextDouble();
System.out.println("请您输入机票的月份(1-12): ");
int month = sc.nextInt();
System.out.println("请输入您选择的舱位类型:");
String type = sc.next();
//4.调用方法,统计结果
System.out.println("机票优惠后的价格是: "+calc(money,month,type));
}
/*
定义方法接收信息,统计优惠后的价格返回。
*/
public static double calc(double money,int month,String type){
//3.判断用户选择的信息情况
if (month >=5 && month <=10){
//旺季
switch (type){
case "头等舱":
money *= 0.9;
break;
case "经济舱":
money *=0.85;
break;
default:
System.out.println("您输入的舱位不存在~~~");
money = -1;//表示当前无法计算价格
}
} else if (month == 11 || month == 12|| month >= 1 && month <=4) {
//淡季
switch (type){
case "头等舱":
money *= 0.7;
break;
case "经济舱":
money *=0.65;
break;
default:
System.out.println("您输入的舱位不存在~~~");
money = -1;//表示当前无法计算价格
}
}else {
System.out.println("对不起,您输入的月份有问题。。。");
return -1;//表示当前无法计算价格
}
return money;//返回最终价格
}
}
案例2:找素数
素数:如果除了1和它本身以外,不能被其他正整数整除,叫素数。
需求:
找出并输出101-200之间的全部素数。
分析:
①101-200之间的数据可以采用循环依次拿到;每拿到一个数,判断该数是否是素数。
②判断规则:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,没有则是素数。
public class Test {
/*找素数
*/
public static void main(String[] args) {
//1.定义一个循环,找出101-200之间的全部数据。
for (int i = 101; i <=200 ; i++) {
//信号位:标记
boolean falg = true;//一开始认为当前数据是素数
//2.判断当前遍历的这个数据是否是素数
for (int j = 2; j < i / 2; j++) {
if (i % j ==0){
falg = false;
break;
}
}
//3.根据判定的结果选择是否输出这个数据,是素数则输出。
if (falg) {
System.out.println(i + "\t");
}
}
}
}
案例3:验证码
需求:
定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
分析:
①定义一个方法,生成验证码返回:方法参数是位数、方法的返回值类型是String。
②在方法内部使用for循环生成指定位数的随机字符,并连接起来。
③把链接好的随机字符作为一组验证码返回。
import java.util.Random;
public class Test {
/*验证码
*/
public static void main(String[] args) {
//4.调用获取验证码的方法得到一个随机的验证码。
String code = createCode(5);
System.out.println("随机验证码:"+code);
}
//1.定义一个方法返回一个随机验证码
public static String createCode(int n){
//3.定义一个字符串变量记录生成的随机字符
String code = " ";
Random r = new Random();
//2.定义一个for循环,循环n次,依次生成随机字符。
for (int i = 0; i < n; i++) {
//3.生成一个随机字符:英文大写,小写,数字。
int type = r.nextInt(3);
switch (type){
case 0:
//大写字符(A 65 - Z 65+25 ) (0-25)+65
char ch = (char) (r.nextInt(26)+65);
code += ch;
break;
case 1:
// 小写字符(a 97 - z 97+25 ) (0-25)+97
char cr = (char) (r.nextInt(26)+97);
code += cr;
break;
case 2:
//数字字符(0-9)
code += r.nextInt(10);
break;
}
}
return code;
}
}
案例4:数组元素的复制
需求:
把一个数组的元素复制到另一个新数组中去
分析:
①需要动态初始化一个数组,长度与原数组一样;
②遍历原数组的每个元素,依次赋值给每个元素。
public class Test {
/*把一个数组复制到另一个数组中去
*/
public static void main(String[] args) {
int[] arr1 = {11,22,33,44,55};
int[] arr2 = new int[arr1.length];
copy(arr1,arr2);
printArray(arr1);
printArray(arr2);
}
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("]");
}
public static void copy(int[] arr1,int[] arr2){
//正式完成元素的复制
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
}
}
案例5:评委打分
需求:
在唱歌比赛中,有6位评委给选手打分,分数范围是[0-100]之间的整数。选手最后的得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
分析:
①把6个评委的分数录入到程序中去 ====》使用数组。
②遍历数组中的每个数据,进行累加求和,并找出最高分、最低分。
③按照分数的计算规则算出平均分。
import java.util.Scanner;
public class Test {
/*评委打分
*/
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)+"个评委的打分: ");
int score = sc.nextInt();
//3.把这个分数存入到数组的对应位置处
scores[i] = score;
}
//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 result= (sum -max -min)*1.0/(scores.length-2);
System.out.println("选手的最终得分为:"+result);
}
}
案例6:数字加密
需求:
某系统的数字密码:比如1983,采用加密的方法进行传输,规则如下:先得到每位数,然后每位数都加上5,再对10求余,最后所有的数字反转,得到一串新的数字。
分析:
①将每位数据存入到数组中去,遍历数组每位数据按照规则进行更改,把更改后的数据重新存入到数组中。
②将数组的前后元素进行交换,数组中的最终元素就是加密后的结果。
import java.util.Scanner;
public class Test {
/*数字加密
*/
public static void main(String[] args) {
//1.定义一个数组存入需要加密的数据
System.out.println("请您输入需要加密的数字个数: ");
Scanner sc = new Scanner(System.in);
int length = sc.nextInt();
int[] arr = new int[length];
//2.录入需要加密的数字
for (int i = 0; i < arr.length; i++) {
System.out.println("请您输入加密第"+(i + 1)+"个数字: ");
int number = sc.nextInt();
arr[i] = number;
}
//3.打印数组内容看一下
printArray(arr);
//4.对数组中的数据进行加密
for (int i = 0; i < arr.length; i++) {
arr[i] = (arr[i]+5) %10;
}
//5.对数组中加密的数据进行反转
for (int i = 0, j= args.length-1; i <j ; i++) {
//交换位置
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
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.print("]");
}
}
案例7:模拟双色球系统
分析:
①中奖号码由6个红球和1个蓝球组成(注意:6个红球要求不能重复)。
②可以定义方法用于返回一组中奖号码(7个数据),返回的形式是一个整型数组。
import java.util.Random;
import java.util.Scanner;
public class Test {
/*模拟双色球
*/
public static void main(String[] args) {
//1.随机6个红球号码(1-33,不能重复),随机一个蓝球号码(1-16),可以采用数组装起来作为中奖号码。
int[] luckNumber = createLuckNumber();
printArray(luckNumber);
//2.调用一个方法让用户输入7个号码,作为用户选号
int[] user = userInputNumbers();
printArray(user);
//3.判断中奖情况
judge(luckNumber,user);
}
public static void judge(int[] luckNumbers,int[] user){
//判断是否中奖
//1.定义两个变量分别存储红球命中的个数,以及篮球命中的个数。
int redHitNumbers = 0;
int blueHitNumbers = 0;
//2.判断红球命中几个,开始统计。
for (int i = 0; i < user.length-1; i++) {
for (int j = 0; j < luckNumbers.length-1; j++) {
//每次找到了相等的,意味着当前号码命中
if (user[i] == luckNumbers[j]){
redHitNumbers ++;
break;
}
}
}
//蓝球号码是否命中
blueHitNumbers = luckNumbers[6] == user[6] ? 1 : 0 ;
System.out.println("中奖号码是: ");
printArray(luckNumbers);
System.out.println("您投注的号码是:");
printArray(user);
System.out.println("您命中了"+redHitNumbers+"个红球");
System.out.println("您是否命中了蓝球:"+(blueHitNumbers ==1 ? "是" : "否"));
//判断中奖情况
if (blueHitNumbers == 1 && redHitNumbers <3){
System.out.println("恭喜您,中了5元奖");
} else if (blueHitNumbers ==1&& redHitNumbers == 3 || blueHitNumbers==0 && redHitNumbers==4) {
System.out.println("恭喜您,中了10元奖");
} else if (blueHitNumbers ==1 && redHitNumbers ==4 ||blueHitNumbers ==0 && redHitNumbers == 5) {
System.out.println("恭喜您,中了200元奖");
} else if (blueHitNumbers ==1 && redHitNumbers == 5) {
System.out.println("恭喜您,中了3000元奖");
} else if (blueHitNumbers == 0 && redHitNumbers == 6) {
System.out.println("恭喜您,中了500万元奖");
} else if (blueHitNumbers == 1 && redHitNumbers ==6) {
System.out.println("恭喜您,中了1000万元奖");
}else {
System.out.println("感谢您为福利事业做出的贡献!~");
}
}
public static void printArray(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i] +"\t");
}
System.out.println();//换行
}
public static int[] userInputNumbers(){
//a.定义一个数组存储7个号码。
int[] numbers = new int[7];
//b.让用户录入6个红球号码
Scanner sc = new Scanner(System.in);
for (int i = 0; i < numbers.length-1; i++) {
System.out.println("请您输入第"+(i + 1)+"红球号码(1-33,要求不重复):");
int data = sc.nextInt();
//c.把当前录入的数据存入到数组中去
numbers[i] = data;
}
//d.单独录入一个蓝球号码
System.out.println("请您输入蓝球号码(1-16): ");
numbers[6] = sc.nextInt();
return numbers;
}
public static int[] createLuckNumber() {
//a.定义一个动态化的数组,存储7个数字
int[] numbers = new int[7];
//b.遍历数组,为每个位置生成对应的号码(注:遍历前6个位置,生成6个不重复的红球号码,范围是1-33)
Random r = new Random();
for (int i = 0; i < numbers.length-1; i++) {
while (true){
int data = r.nextInt(33) + 1;//1-33 ===>(0-32)+1
//c.必须判断当前随机的这个号码之前是否出现过,出现过要重新随机一个,直到不重复为止,才可以存入到数组中去。
//定义一个flag变量,默认为data是没有重复的。
boolean flag = true;
for (int j = 0; j < i; j++) {
if (numbers[j] == data) {
//说明data当前这个数据之前出现过,不能用。
flag = false;
break;
}
}
if (flag) {
//data这个数据之前没有出现过,可以使用了。
numbers[i] = data;
break;
}
}
}
//d.为7个位置生成一个1-16的号码作为蓝球号码
numbers[numbers.length-1] = r.nextInt(16) + 1;
return numbers;
}
}