Java第七次笔记---案例练习汇总

目录

一、案例一:买飞机票

问题暴露1:

问题暴露2:

​ 案例一总结:

 二、案例二:找素数

三、案例三:开发验证码 

​ 四、数组元素复制

 五、评委打分

 案例六:数字加密

七、模拟双色球

7.1业务分析、随机生成一组中奖号码

暴露问题一:

暴露问题二:

 思路提升一:

​​ 7.2用户输入一组双色号码

 7.3判断中奖情况

一、案例一:买飞机票

案例:

案例分析:

问题暴露1:

对于输入的操作指令掌握不熟练。

Scanner sc = new Scanner(System.in);

以及数据的接收代码的书写。

double money = sc.nextDouble();
int month = sc.nextInt();
String type = sc.next();

问题暴露2:

1、switch整体判断结构使用的不熟练。

switch(type){
    case type1:
    内容;
    break;
    case type2:
    内容;
    break;
    ......
    default:
    内容;
}

2、case后面不要忘记添加上break;

3、最后的判断分支要用default结束。

个人敲写代码:

public class Demotest1 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的机票原价:");
        double money = sc.nextDouble();
        System.out.println("请输入您的月份:");
        int month = sc.nextInt();
        System.out.println("请输入您的机票类型:");
        String type = sc.next();
        System.out.println("最终的票价:" + Getprice(money, month, type));

    }
    public static double Getprice(double money,int month,String type){
        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 == 2){
            switch(type){
                case "头等舱":
                    money *=0.7;
                    break;
                case "经济舱":
                    money *=0.65;
                    break;
                default:
                    System.out.println("您输入的仓位类型有误,请重新输入!");
                    money = -1;
            }
        }else{
            System.out.println("您输入的月份有误,请重新输入!");
            money = -1;
        }
        return money;
    }
}

结果:

参考代码:

 

 案例一总结:

1、要合理的使用if和swith判断,根据他们的特点做好相应的使用。

2、if判断结构最好应用于值区间判断。也可用值匹配判断。

3、switch判断结构最好应用于只匹配判断。

 二、案例二:找素数

案例:

 案例解析:

 个人敲写:

public class Demotest2 {
    public static void main(String[] args){
        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.println(i + "\t");
            }
        }
    }
}

 结果如下:

参考代码:

三、案例三:开发验证码 

案例:

案例分析:

 暴露问题一:

1、对于随机数的使用遗忘。

随机数应该如下设定:

Random r = new Random;
int type = r.nextInt(3);//nextInt的类型可以有多种选用

暴露问题二:

强制类型转换:

获取随机字母的新思路:

思路获得:

利用随机数与强制类型转换,即可得到。

代码如下:

char ch1 = (char)(r.nextInt(26)+65);//获得大写字母随机数
char ch2 = (char)(r.nextInt(26)+97);//获得小写字母随机数

 本案例部分的代码如下:

public class Demotest3 {
    public static void main(String[] args){
        System.out.println("验证码:" + CodeRandom(5));
    }
    public static String CodeRandom(int n){
        String code = "";
        Random r = new Random();
        for (int i = 0; i < n; i++) {
            int type = r.nextInt(3);
            switch(type){
                case 0://大写字母的随机数
                    char ch1 = (char)(r.nextInt(26)+65);
                    code += ch1;
                    break;
                case 1://小写字母的随机数
                    char ch2 = (char)(r.nextInt(26)+97);
                    code += ch2;
                    break;
                case 2://数字的随机数
                    int data = r.nextInt(10);
                    code +=data;
                    break;
            }
        }
    return code;
    }
}

结果如下:

参考代码如下:

 四、数组元素复制

 案例:

案例分析:

 数组复制错误代码展示:

以下的代码能够达到两个数组得到相同的数据,比如说查询arr2数组下的内容会展示arr1下的数组内容。

错误代码如下:没有实现数组的复制

public class Demotest4 {
    public static void main(String[] args){
        int[] arr1 = {11,22,33,44};
        int[] arr2 = arr1;
    } 
}

 暴露问题一“

对于元素的输出代码表示。

    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("]");
    }

代码输出如下:

public class Demotest4 {
    public static void main(String[] args){
        int[] arr1 = {11,22,33,44};
        // int[] arr2 = arr1;
        int[] arr2 = new int[arr1.length];
        CopyArray(arr1,arr2);
        PrintArray(arr1);
        PrintArray(arr2);

    }
    public static void CopyArray(int[] arr1,int[] arr2){
        for (int i = 0; i < arr1.length; i++) {
            arr2[i] = arr1[i];
        }
    }
    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("]");
    }
}

 结果输出:

 参考代码如下:

 五、评委打分

案例: 

 案例分析:

 暴露问题一:

最高分与最低分的筛选代码书写,采用一个循环,两个判断。

代码如下:

        for (int i = 0; i < scores.length; i++) {
            if(max < scores[i]){
                max = scores[i];

            }
            if(min > scores[i]){
                min = scores[i];

            }

    }

整体代码的书写:

import java.util.Scanner;

public class Demotest5 {
    public static void main(String[] args){
        int[] scores = new int[6];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入第" + (i+1) +"位评委的分数:");
            int score = sc.nextInt();
            scores[i] = score;
        }
        int max = scores[0];
        int min = scores[0];
        double sum = 0.0;
        for (int i = 0; i < scores.length; i++) {
            if(max < scores[i]){
                max = scores[i];

            }
            if(min > scores[i]){
                min = scores[i];

            }
        sum +=scores[i];
        }
        System.out.println("评委中的最高分:" + max);
        System.out.println("评委中的最低分:" + min);
        double arravage = (sum-max-min)/(scores.length-2);
        System.out.println("评委的平均分:" + arravage);
    }
}

参考代码如下:

结果如下:

参考代码: 

 案例六:数字加密

案例:

案例分析:

 暴露问题一:

获取数据前后之间交换。中间涉及到了数据的位置变换代码。设置一个中间的数作为转换。如temp。

代码如下:

            int temp = data[j];
            data[j] = data[i];
            data[i] = temp;

 整体代码如下:

import jdk.swing.interop.SwingInterOpUtils;

import java.util.Scanner;

public class Demotest6 {
    public static void main(String[] args){
        //初始数据个数作为获得数据的长度,以及数据的内容获得
        System.out.println("请输入参数的个数:");
        Scanner sc =new Scanner(System.in);
        int length = sc.nextInt();
        int[] data = new int[length];
        for (int i = 0; i < data.length; i++) {
            System.out.println("请您输入第" + (i+1) + "个数");
            data[i] =sc.nextInt();
        }
        System.out.println("初始数据结果:");
        PrintArray(data);
        //数据的初始处理
        for (int i = 0; i < data.length; i++) {
            data[i] = (data[i]+5)%10;
        }
        System.out.println("数据初始处理后结果:");
        PrintArray(data);
        //数据的反转,前后之间的反转
        for (int i = 0, j = data.length-1; i < j; i++ ,j--) {
            int temp = data[j];
            data[j] = data[i];
            data[i] = temp;
        }
        System.out.println("输出处理最终的结果:");
        PrintArray(data);
    }
    //输出打印数组的方法
    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("]");
    }
}

 参考代码如下:

七、模拟双色球

7.1业务分析、随机生成一组中奖号码

案例:

案例分析:

暴露问题一:

如果方法有数据值的返回,则需要在mian方法中定义对应返回数据类型的变量来接收。本案例是接收数组数据

暴露问题二:

数组的索引数值与for循环中i的值之间关系。本案例看该代码:数组的前六个数怎么设定。 

 思路提升一:

使用标志位来避免随机数字的重复出现。本次案例中利用boolean flag = true;如果程序能够执行到 if(flag)此条语句时,就说明此时的flag为true,前面numbers数组中的数据没有重复的情况出现。然后再这个里面添加上break;来结束该死循环。

个人代码:

public class Demotest7 {
    public static void main(String[] args){
    //注意:数组返回的数据只是个地址,需要再次定义一个数组来进行接收方法生成的返回数据。一定要注意
    int[] lucky = RandomArray();
        System.out.println("输出的幸运数字:");
        for (int i = 0; i < lucky.length; i++) {
            System.out.print(lucky[i]+"\t");
        }


    }
public static int[] RandomArray (){
        int[] numbers = new int[7];
        Random r = new Random();
        for (int i = 0; i < numbers.length-1; i++) {//i的判断时 7-1=6 ,此时i的取值为 0,1,2,3,4,5.也就是数组的前六个数据
            //使用while死循环来避免随机出来的数字发生重复的情况
            while(true){
                int data1 = r.nextInt(33)+1;
                boolean flag = true;
                for (int j = 0; j < i; j++) {
                    if(numbers[i] == numbers[j]){//本人案例代码输入if(numbers[i] == numbers[j])
                        flag = false;
                        break;//使用break打破while死循环
                    }
                }
                //如果能够执行到该位置,则说明前面的数据没有出现重复的数据发生
                if(flag){
                    numbers[i] = data1;//令改没有重复的数据放入到数组当中,成为新的数据加入。
                    break;//使用break打破while死循环
                }
            }
        }
        //第七个数据添加到数组当中
        int data2 = r.nextInt(16)+1;
        numbers[numbers.length-1] = data2;
        //返回数组的地址
        return numbers;
    }
}

 参考代码:

 7.2用户输入一组双色号码

//创建一个输出选中数字的方法
public static void PrintArray(int[] arr){
    System.out.println("您选中的数字:");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "\t");
    }
}
//创建一个选中数字的方法,输入数字的方法。
public static int[] ScannerArray(){

    Scanner sc = new Scanner(System.in);
    int[] array = new int[7];
    for (int i = 0; i <array.length-1 ; i++) {
        System.out.println("请输入您选择的第" + (i+1) +"位数字内容(1-33):");
        int data1 = sc.nextInt();
        array[i] = data1;
    }
    System.out.println("请输入您选择的第7位数字内容(0-16):");
    int data2 = sc.nextInt();
    array[array.length-1] = data2;
    return array;
}

结果如下:

 7.3判断中奖情况

问题暴露一:

&的优先级比||优先级高。 

 优化:

在判断奖项位置也可以使用if分支语句进行判断代码如下:

import java.util.Random;
import java.util.Scanner;

public class Demotest7 {
    public static void main(String[] args){
    //注意:数组返回的数据只是个地址,需要再次定义一个数组来进行接收方法生成的返回数据。一定要注意
    int[] lucky = RandomArray();
    /*
        System.out.println("输出的幸运数字:");
        for (int i = 0; i < lucky.length; i++) {
            System.out.print(lucky[i]+"\t");
        }
    System.out.println();

     */
    int[] printarray = ScannerArray();

    Judge(lucky,printarray);
    }
public static void Judge(int[] lucky,int[] printarray ) {
    System.out.println("您选中的数字:");
    PrintArray(printarray);
    System.out.println();
    System.out.println("幸运数字:");
    PrintArray(lucky);
    System.out.println();

    int readnumbers = 0;
    int bluenumbers = 0;
    for (int i = 0; i < lucky.length-1; i++) {
        for (int j = 0; j < printarray.length-1; j++) {
            if(lucky[i] == printarray[j]){
                readnumbers ++;
                break;
            }
        }
    }
    if(lucky[lucky.length-1] == printarray[printarray.length-1]){
        bluenumbers = 1;
    }else {
        bluenumbers = 0;
    }
    switch(readnumbers*1+bluenumbers*100){
        case 100:
            System.out.println("恭喜您获得六等奖,中奖5元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 101:
            System.out.println("恭喜您获得六等奖,中奖5元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 102:
            System.out.println("恭喜您获得六等奖,中奖5元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 103:
            System.out.println("恭喜您获得五等奖,中奖10元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 4:
            System.out.println("恭喜您获得五等奖,中奖10元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 104:
            System.out.println("恭喜您获得四等奖,中奖200元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 5:
            System.out.println("恭喜您获得四等奖,中奖200元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 105:
            System.out.println("恭喜您获得三等奖,中奖3000元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 6:
            System.out.println("恭喜您获得二等奖,中奖500万元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        case 106:
            System.out.println("恭喜您获得一等奖,中奖1000万元!");
            System.out.println("选中的红球数:" +readnumbers + "选中的蓝球数:" + bluenumbers);
            break;
        default:
            System.out.println("非常遗憾,您未中奖!");
    }
}
public static void PrintArray(int[] arr){

    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "\t");
    }
}
public static int[] ScannerArray(){

    Scanner sc = new Scanner(System.in);
    int[] array = new int[7];
    for (int i = 0; i <array.length-1 ; i++) {
        System.out.println("请输入您选择的第" + (i+1) +"位数字内容(1-33):");
        int data1 = sc.nextInt();
        array[i] = data1;
    }
    System.out.println("请输入您选择的第7位数字内容(1-16):");
    int data2 = sc.nextInt();
    array[array.length-1] = data2;
    return array;
}

public static int[] RandomArray (){
        int[] numbers = new int[7];
        Random r = new Random();
        for (int i = 0; i < numbers.length-1; i++) {//i的判断时 7-1=6 ,此时i的取值为 0,1,2,3,4,5.也就是数组的前六个数据
            //使用while死循环来避免随机出来的数字发生重复的情况
            while(true){
                int data1 = r.nextInt(33)+1;
                boolean flag = true;
                for (int j = 0; j < i; j++) {
                    if(numbers[i] == numbers[j]){//本人案例代码输入if(numbers[i] == numbers[j])
                        flag = false;
                        break;//使用break打破while死循环
                    }
                }
                //如果能够执行到该位置,则说明前面的数据没有出现重复的数据发生
                if(flag){
                    numbers[i] = data1;//令改没有重复的数据放入到数组当中,成为新的数据加入。
                    break;//使用break打破while死循环
                }
            }
        }
        //第七个数据添加到数组当中
        int data2 = r.nextInt(16)+1;
        numbers[numbers.length-1] = data2;
        //返回数组的地址
        return numbers;
    }
}

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值