Java编程训练案例

目的

        复习前半段课程学习的Java编程知识,能够使用所学的知识解决问题,提升同学们的编程能力。

涉及到的知识点

        变量、数组

        运算符:基本运算符、关系运算符、逻辑运算符...

        程序流程控制: if、switch; for、while;死循环、循环嵌套

        跳转关键字: break、continue、return。

        方法
        ...

编程思维

        使用所学的Java技术解决问题的思维方式和编写代码实现出来的能力。

关于提升编程思维和编程能力的建议

        编程思维和编程能力不是一朝一夕形成的,需要时间的沉淀和大量练习。

        前期:先模仿,后期:再创新。

        具体措施:勤于练习代码,勤于思考,孰能生巧。

案例一:买飞机票

需求:
        1.机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。

        2.机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

package com.WjhJava.MethodDemo;

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

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机
        /* 需求/目标:
         *   需求:
         * 1.机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。

         *2.机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
         * */
        System.out.println("请输入当前票价:");
        double money = sc.nextDouble();

        System.out.println("请输入当前月份:");
        int month = sc.nextInt();

        System.out.println("请输入乘坐仓位类型:");
        String flyType = sc.next();

        System.out.println("票价为:"+fly(money, month, flyType));


    }

    public static double fly(double money,int month,String flyType){

        if(month >= 5 && month <=10){    //STring判断时用switch分支,否则值会传输错误
            switch (flyType){
                case "头等舱":
                    money *= 0.9;
                    break;
                case "经济舱":
                    money *= 0.85;
                    break;
                default:
                    System.out.println("您输入的仓位类型有误,请重新输入!");
                    money = -1;
            }
        }else if(month >=1 && month <=4 || month == 11 || month == 12){

            switch (flyType){
                case "头等舱":
                    money *= 0.7;
                    break;
                case "经济舱":
                    money *= 0.65;
                    break;
                default:
                    System.out.println("您输入的仓位类型有误,请重新输入!");
                    money = -1;
            }


        }else{
            System.out.println("您输入的月份有误,请重新输入!");
            money = -1;
        }

        return money;
    }

    }

Java编程训练案例_第1张图片


案例二:找素数

Java编程训练案例_第2张图片

分析
        1.101-200之间的数据可以采用循环依次拿到;每拿到一个数,判断该数是否是素数。
        2. 判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,没有则是素数。

package com.WjhJava.MethodDemo;

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

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机
        /* 需求/目标:
         *   需求:
         * 找出101-200的所有素数(除了1和它本身能整除的数称为素数!)
         * */

        //1.定义一个循环,找到101到200的全部数据
        for (int i = 101; i <= 200 ; i++) {
            //i = 101 102 103 ... 199 200

            //信号位:标志
            boolean flag = true;    //一开始认为当前数据是素数

            //2.判断当前遍历的这个数据是否是素数
            for (int j = 2; j <= i/2; j++) {
                if(i % j == 0){
                    flag = false;
                    break;
                }
            }

            //3.根据判定的结果选择是否输出这个数据,是素数则输出
            if(flag){
                System.out.println(i);
            }



        }

    }

    }


案例三:开发验证码

需求:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

分析:

        1.定义一个方法,生成验证码返回:方法参数是位数、方法的返回值类型是String。

        2.在方法内部使用for循环生成指定位数的随机字符,并连接起来。

        3把连接好的随机字符作为一组验证码进行返回。

package com.WjhJava.MethodDemo;

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

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机
        /* 需求/目标:
         *   需求:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
        分析:
        1.定义一个方法,生成验证码返回:方法参数是位数、方法的返回值类型是String。
        2.在方法内部使用for循环生成指定位数的随机字符,并连接起来。
        3把连接好的随机字符作为一组验证码进行返回。
         * */

        //调用获取验证码的方法得到一个随机的验证码
        String code = createCode(5);
        System.out.println("随机验证码:"+code);
    }

    /*
    1.定义一个方法返回一个随机验证码,是否需要返回值类型声明?String 是否需要声明形参?
    */

    public static String createCode(int n){
        //3.定义一个字符串变量记录生成的随机字符
        String code = "";

        //2.定义一个for循环,循环n次,依次生成随机字符
        Random r = new Random();

        for (int i = 1; i <= n; i++) {
            //3.随机生成一个字符:英文大小写,数字(0,1,2)
            int type = r.nextInt(3);    //0 1 2
            switch (type){
                case 0:     //大写(A 65 ~ Z 65+25) (0~25)+65
                    char ch = (char) (r.nextInt(25)+65);    //强制转成char字符类型
                    code += ch;

                    break;

                case 1:     //小写(a 97 ~ z 97+25) (0~25)+97
                    char ch1 = (char) (r.nextInt(25)+65);    //强制转成char字符类型
                    code += ch1;
                    break;

                case 2:     //数字
                    code += r.nextInt(10);  //0~9
                    break;

            }
        }
        return code;

    }

    }

Java编程训练案例_第3张图片


案例四:数组元素的复制

案例:数组元素复制

        需求:把一个数组中的元素复制到另一个新数组中去。

        分析:1.需要动态初始化一个数组,长度与原数组一样。

                2.遍历原数组的每个元素,依次赋值给新数组。

                3.输出两个数组的内容。

package com.WjhJava.MethodDemo;
/* 需求/目标:
         *  需求:把一个数组中的元素复制到另一个新数组中去。
            分析:
            1.需要动态初始化一个数组,长度与原数组一样。
            2.遍历原数组的每个元素,依次赋值给新数组。
            3.输出两个数组的内容。
         * */

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

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机

        int[] arr = {10,20,30,40,50};
        int[] newArr = new int[arr.length];

        System.out.print("原数组:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }

        System.out.println();

        System.out.print("新数组:");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < newArr.length; j++) {
                newArr[j] = arr[i];
                System.out.print(newArr[j]+" ");
                break;
            }

        }





    }

    }
package com.WjhJava.MethodDemo;
/* 需求/目标:
         *  需求:把一个数组中的元素复制到另一个新数组中去。
            分析:
            1.需要动态初始化一个数组,长度与原数组一样。
            2.遍历原数组的每个元素,依次赋值给新数组。
            3.输出两个数组的内容。
         * */

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

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机

        int[] arr = {11,22,33,44,55};
        int[] copyArr = new int[arr.length];
        copy(arr,copyArr);

    }

    public static void copy(int[] arr,int[] copyArr){
        for (int i = 0; i < arr.length ; i++) {
            copyArr[i] = arr[i];
        }

        System.out.println("原数组:");
        printArr(arr);

        System.out.println("\n");

        System.out.println("新数组:");
        printArr(copyArr);

    }

    public static void printArr(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("]");


    }

    }


案例五:评委打分

案例:评委打分案例

需求:        在唱歌比赛中,有6名评委给选手打分,分数范围是[0~100]之间的整数。选手的最后得分分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分.

分析:

        ①把6个评委的分数录入到程序中去---->使用数组

int[] scores = new int[6];

        ②遍历数组中每个数据,进行累加求和,并找出最高分、最低分。

        ③按照分数的计算规则算出平均分。

package com.WjhJava.MethodDemo;
        /* 需求/目标:
        需求:在唱歌比赛中,有6名评委给选手打分,分数汜围定[u~1uu]L也八E 高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分.

        分析:
        ①把6个评委的分数录入到程序中去---->使用数组
        int[] scores = new int[6];
        ②遍历数组中每个数据,进行累加求和,并找出最高分、最低分。
        ③按照分数的计算规则算出平均分。
         * */

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

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机

        int[] arr = new int[6];
        score(arr);


    }

    public static void score(int[] arr){
        Random r = new Random();       //随机

        for (int i = 0; i < arr.length; i++) {      //随机生成数组最大长度的分数,然后遍历赋值给他
            arr[i] =r.nextInt(101);
        }


        //采用冒泡排序的方法
        for (int i = 0; i < arr.length-1; i++) {  //次数

            for (int j = 0; j < arr.length-i-1; j++) {  //轮数

                if(arr[j] > arr[j+1]){      //如果j位大于后一位,则交换位置
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

        //按照上面从小打大排好的数组遍历输出
        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();

        double count = 0;

        System.out.print("去掉最高分和最低分:");
        for (int i = 1; i < arr.length-1; i++) {        //去掉最高分和最低分
            System.out.print(i == arr.length-2 ? arr[i] : arr[i]+",");
            count += arr[i];
        }

        System.out.println();

        System.out.println("选手最终的得分是:"+count/ (arr.length-2));      //输出打印

    }

    }

Java编程训练案例_第4张图片

案例六:数字加密

 需求:        某系统的数字密码:比如1983,采用加密方式进行传输,规则如下︰先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。

package com.WjhJava.MethodDemo;
        /* 需求/目标:
        需求:某系统的数字密码:比如1983,采用加密方式进行传输,规则如下︰先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
         * */

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

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机

        //1.定义一个数组存入需要加密的数组
        System.out.println("请您输入需要的密码个数:");
        int passNum = sc.nextInt();
        int[] pass = new int[passNum];

        //2.录入需要加密的数字
        for (int i = 0; i < pass.length; i++) {
            System.out.println("请输入第" + (i + 1) + "位密码:");
            int date = sc.nextInt();
            pass[i] = date;
        }

        //3.打印数组内容看一下
        printPass(pass);        //[1,9,8,3]

        //4.核心内容:对数组中的内容进行加密;pass[]={1,9,8,3,}
        for (int i = 0; i < pass.length; i++) {
            pass[i] =  (pass[i] + 5) % 10;
        }

        //5.核心逻辑:(对数组中加密的数据进行反转,才是最终加密的结果)      //pass = {6 ,4 ,3 ,8 }
        //                                                  占位:            i        j
        for (int i = 0,j=pass.length-1; i < j; i++,j--) {       //
            int temp = pass[i];
            pass[i] = pass[j];
            pass[j] = temp;
        }

        printPass(pass); //打印加密并反转后的数组      //[8,3,4,6]

    }

    public static void printPass(int[] pass){
        System.out.print("[");
        for (int i = 0; i < pass.length; i++) {
            System.out.print(i == pass.length-1 ? pass[i] : pass[i]+",");
        }
        System.out.println("]");
    }



    }

ps:也可以当成解密程序

Java编程训练案例_第5张图片


案例七:模拟双色球[拓展]

P69 08


 

你可能感兴趣的:(笔记,Java基础,java,jvm,开发语言)