Java小练习(新手十天必须会的小练习)

Java练习小项目

如果你学java一周了,那下面的小练习,必须要能掌握

1,卖飞机票

 需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
 按照如下规则计算机票价格:
 旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
package xyz.lybigdata.practice;

import java.util.Scanner;

public class Demo01 {
    /*
     卖飞机票
     需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
     按照如下规则计算机票价格:
     旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
     */
    public static void main(String[] args) {
           /*
           思路:
            1,键盘录入机票原价,月份,是否头等舱
            2,判断是否淡季
            3,计算价格
            */
        System.out.print("请输入机票原价:");
        int price = new Scanner(System.in).nextInt();
        System.out.print("请输入月份:");
        int month = new Scanner(System.in).nextInt();
        System.out.print("请输入舱位 1:头等舱 2:经济舱 :");
        int grade = new Scanner(System.in).nextInt();
        // 旺季
        if (month >= 5 && month <= 10) {
            price = getPrice(grade, price, 0.9, 0.85);
        } else if ((month >= 1 && month <= 4) || (month > 10 && month <= 12)) {
            price = getPrice(grade, price, 0.7, 0.65);
        } else {
            System.out.println("没有这个月份");
        }
            System.out.println("此时机票价格是:" + price);
    }
// 重复代码用方法
    public static int getPrice(int grade, int price, double v, double v1) {
        if (grade == 1) {
            price = (int) (price * v);
        } else if (grade == 2) {
            price = (int) (price * v1);
        } else {
            System.out.println("没有这个选择");
        }
        return price;
    }
}

2,找质数

判断 101 ~ 200 之间有多少个素数,并打印所有素数
package xyz.lybigdata.practice;

public class Demo02 {
    /*
    
    找质数
    判断 101 ~ 200 之间有多少个素数,并打印所有素数
     */
    public static void main(String[] args) {
        int count = 0;
        for (int i = 101; i <= 200; i++) {
            boolean flag = true;
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    flag = false; // 不是质数
                    break;
                }
            }
            if (flag) {
                System.out.println(i + "是质数");
                count++;
            }
        }
        System.out.println("一共" + count + "个质数");
    }
}

3,定义方法实现随机产生一个5位的验证码

定义方法实现随机产生一个5位的验证码
验证码格式:
长度为5
前四位是大写字母或者小写字母
最后一位是数字
package xyz.lybigdata.practice;

import java.util.Random;

public class Demo03 {
    /*
            需求:
            定义方法实现随机产生一个5位的验证码
            验证码格式:
            长度为5
            前四位是大写字母或者小写字母
            最后一位是数字
     */
    public static void main(String[] args) {
        /*
        思路:
        1.大写字母和小写字母都放到数组当中
        2.随机抽取4次
        3.随机抽取一个数字0~9
         */

        // 1.大写字母和小写字母都放到数组当中
        // 在一堆没有什么规律的数据中随机抽取,可以先把这些数据放到数组当中,再随机抽取一个索引
        char[] chs = new char[26+26];
        for (int i = 0; i < chs.length; i++) {
            if (i < 26){
                // ASCII 码表
                // 小写 97
                chs[i] = (char) (97 + i);
            }else {
                // 大写 65
                chs[i] = (char) (65 + i - 26);
            }
        }
        // 2.随机抽取4次
        // 定义一个字符串,来记录最终的结果
        String result = "";
        // 随机抽取数组中的索引
        for (int i = 0; i < 4; i++) {
            int randomIndex = new Random().nextInt(chs.length);
            result = result + chs[randomIndex];
        }
        // 3.随机抽取一个数字0~9
        int num = new Random().nextInt(9);
        // 生成结果
        result = result + num;
        // 打印结果
        System.out.println(result);
    }
}

4,把一个数组中的元素复制到另一个新数组中去。

package xyz.lybigdata.practice;

import java.util.Arrays;

public class Demo04 {
     /*
        需求:
        把一个数组中的元素复制到另一个新数组中去。
     */
     public static void main(String[] args) {
         /*
         思路:
         1.定义一个数组并存储一些元素
         2.定义一个新数组的长度跟老数组一致
         3.遍历老数组,得到老数组中的每一个元素,依次存入到新数组当中
          */
         // 1.定义一个数组并存储一些元素
         int[] Arr = {1,2,3,4,5};
         //2.定义一个新数组的长度跟老数组一致
         int[] newArr = new int[Arr.length];
         // 3.遍历老数组,得到老数组中的每一个元素,依次存入到新数组当中
         for (int i = 0; i < Arr.length; i++) {
             newArr[i] = Arr[i];
         }
         // 输出结果
         System.out.println(Arrays.toString(newArr));
     }
}

5,在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。

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

import java.util.Scanner;

public class Demo05 {
    /*
    需求:
    在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。
    选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
     */
    public static void main(String[] args) {
        /*
        思路:
        1.定义一个数组,用来存储6名评委的打分(0~100)
        2.求出数组中的最大值
        3.求出数组中的最小值
        4.求出数组中6个分数的总和
        5.(总和 - 最大值 - 最小值 )/4
         */

        // 1.定义一个数组,用来存储6名评委的打分(0~100)
        int[] score = new Demo05().getScore();
        // 2.求出数组中的最大值
        int max = new Demo05().getmax(score);
        // 3.求出数组中的最小值
        int min = new Demo05().getmin(score);
        // 4.求出数组中6个分数的总和
        int sum = new Demo05().getSum(score);
        // 5.(总和 - 最大值 - 最小值 )/4
        int result = (sum - max -min) / (score.length - 2);
        // 打印结果
        System.out.println("选手的最高分是:" + max);
        System.out.println("选手的最低分是:" + min);
        System.out.println("选手的最后得分是:" + result);


    }
    /**
     * 1.定义一个数组,用来存储6名评委的打分(0~100)
     * @return arr
     */
    int[] getScore(){
        int[] arr = new int[6];
        for (int i = 0; i < arr.length;) {
            System.out.print("请打分(0~100):");
            int num = new Scanner(System.in).nextInt();
            if (num < 0 || num >100){
                System.out.println("分数不合规,重新输入");
            }else{
                arr[i] = num;
                i++;
            }
        }
        return arr;
    }

    /**
     * 2.求出数组中的最大值
     * @param score
     * @return max
     */
    int getmax(int[] score){
        int max = score[0];
        for (int i = 1; i < score.length; i++) {
            if (max < score[i]){
                max = score[i];
            }
        }
        return max;
    }

    /**
     * 3.求出数组中的最小值
     * @param score
     * @return min
     */
    int getmin(int[] score){
        int min = score[0];
        for (int i = 1; i < score.length; i++) {
            if (min > score[i]){
                min = score[i];
            }
        }
        return min;
    }

    /**
     * 4.求出数组中6个分数的总和
     * @param score
     * @return sum
     */
    int getSum(int[] score){
        int sum = 0;
        for (int i = 0; i < score.length; i++) {
            sum = score[i] + sum;
        }
        return sum;
    }

}

6,密码加密

某系统的数字密码(大于0)。
比如1983,采用加密方式进行传输,
规则如下:
    每位数加上5
    再对10求余,
    最后将所有数字反转,
    得到一串新数。
package xyz.lybigdata.practice;

import java.util.Scanner;

public class Demo06 {
    /*
    某系统的数字密码(大于0)。
    比如1983,采用加密方式进行传输,
    规则如下:
        每位数加上5
        再对10求余,
        最后将所有数字反转,
        得到一串新数。
    */
    public static void main(String[] args) {
            /*
            思路:
            1,把整数放到数组里面
            2,加密:
                每位数加上5
                再对10求余
                数组反转
            3,把数组里面的每一个数字进行拼接,变成加密之后的结果
             */

        // 1,把整数放到数组里面
        System.out.print("请输入需要加密的密码:");
        int pwd = new Scanner(System.in).nextInt();
        // 定义一个临时变量存储密码
        int temp = pwd;
        // 定义一个计数器
        int count = 0;
        while (pwd != 0) {
            pwd = pwd / 10; // 每次循环去掉右边一个数字
            count++; // 每去掉一位就自增一次
        }
        // 动态初始化数组
        int[] arr = new int[count];
        // 创建一个数组的索引
        int index = 0;
//             int index = count - 1;       这样的话就需要加一步数组反转
        // 把整数的每一位放到数组
        while (temp != 0) {
            int ge = temp % 10; // 获取temp里面的每一位的值
            temp = temp / 10; // 去掉右边的值
            // 把当前获取的个位添加到数组
            arr[index] = ge;
            index++;
//                index__;  对应第43行
        }
        //       System.out.println(Arrays.toString(arr));
        // 2,加密:
        //          每位数加上5
        //          再对10求余
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + 5;
            arr[i] = arr[i] % 10;
        }
        //System.out.println(Arrays.toString(arr));
        //          数组反转(上面已经反转过了,如果使用第43行,那么需要这步数组反转)
//            for (int i = 0,j = arr.length - 1; i < j; i++,j--) {
//                int tep = arr[i];
//                arr[i] = arr[j];
//                arr[j] = tep;
//            }
        // 3,把数组里面的每一个数字进行拼接,变成加密之后的结果
        int num = 0;
        for (int i = 0; i < arr.length; i++) {
            num = num * 10 + arr[i];
        }
        System.out.println("加密之后的结果:" + num);
    }
}

7,密码解密

某系统的数字密码(大于0)。比如1983,采用加密方式进行传输,
规则如下:
    每位数加上5
    再对10求余,
    最后将所有数字反转,
    得到一串新数。
    按照以上规则进行解密:
    比如1983加密之后变成8346,解密之后变成1983
package xyz.lybigdata.practice;

import java.util.Scanner;

public class Demo07 {
    /*
    某系统的数字密码(大于0)。比如1983,采用加密方式进行传输,
    规则如下:
        每位数加上5
        再对10求余,
        最后将所有数字反转,
        得到一串新数。
        按照以上规则进行解密:
        比如1983加密之后变成8346,解密之后变成1983
    */
    public static void main(String[] args) {
            /*
            思路:
            1,将整数放到数组
            2,解密:
                每位数加上5
                再对10求余,
                最后将所有数字反转
            3,打印结果
             */

        // 1,将整数放到数组
        System.out.print("请输入需要解密的密码:");
        int pwd = new Scanner(System.in).nextInt();
        int temp = pwd;
        int count = 0;
        while (pwd != 0) {
            pwd = pwd / 10;
            count++;
        }
        int[] arr = new int[count];
        int index = 0;
        // 变为数组并且反转
        while (temp != 0) {
            int ge = temp % 10;
            temp = temp / 10;
            arr[index] = ge;
            index++;
        }
        // 2,解密:
        //         每位数加上5
        //         再对10求余,
        //         最后将所有数字反转(上一步反转了)
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + 5;
            arr[i] = arr[i] % 10;
        }
        int num = 0;
        for (int i = 0; i < arr.length; i++) {
            num = num * 10 + arr[i];
        }
        System.out.println("解密之后的结果:" + num);
    }
}

8,抽奖

需求:
一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。
请设计抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
打印效果如下:(随机顺序)
    888元的奖金被抽出
    588元的奖金被抽出
    10000元的奖金被抽出
    1000元的奖金被抽出
    2元的奖金被抽出
package xyz.lybigdata.practice;

import java.util.Random;

public class Demo08 {
    /*
    需求:
    一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。
    请设计抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
    打印效果如下:(随机顺序)
        888元的奖金被抽出
        588元的奖金被抽出
        10000元的奖金被抽出
        1000元的奖金被抽出
        2元的奖金被抽出
    */
    public static void main(String[] args) {
            /*
            思路:
            1,新建一个数组存放这些奖金
            2,定义新数组用于存储抽奖的结果
            3,抽奖
                判断prize在数组当中是否存在
                存在:true
                不存在:false
            4,遍历新数组
             */

        // 1,新建一个数组存放这些奖金
        int[] arr = {2, 588, 888, 1000, 10000};
        // 2,定义新数组用于存储抽奖的结果
        int[] newArr = new int[arr.length];
        // 3,抽奖
        for (int i = 0; i < 5; ) {
            int randomIndex = new Random().nextInt(arr.length);
            int prize = arr[randomIndex];
            if (!contains(newArr, prize)) {
                newArr[i] = prize;
                i++;
            }
        }
        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i] + "元的奖金被抽出");
        }

    }

    /**
     * 判断抽取的奖项在数组当中是否存在
     *
     * @param arr
     * @param prize
     * @return boolean
     */
    static boolean contains(int[] arr, int prize) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == prize) {
                return true;
            }
        }
        return false;
    }
}

9,优化抽奖

package xyz.lybigdata.practice;

import java.util.Random;

public class Demo08_v2 {
    /*
    优化抽奖
     */
    public static void main(String[] args) {
        // 1,打乱奖池的顺序
        int[] arr = {2, 588, 888, 1000, 10000};
        for (int i = 0; i < arr.length; i++) {
            int randomIndex = new Random().nextInt(arr.length);
            int temp = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = temp;
        }
        // 遍历抽取
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "元的奖金被抽出");
        }
    }
}

10, 彩票中奖系统:

投注号码由6个红色球号码和1个蓝色球号码组成。
红色球号码从1-33中选择;蓝色球号码从1-16中选择。
双色球中奖条件和奖金表
package xyz.lybigdata.practice;

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

public class Demo09 {
    /*
    彩票中奖系统:
    投注号码由6个红色球号码和1个蓝色球号码组成。
    红色球号码从1-33中选择;蓝色球号码从1-16中选择。
    双色球中奖条件和奖金表
    等级        说明             奖金
    一等奖      红6蓝1           1000万
    二等奖      红6蓝0           500万
    三等奖      红5蓝1           3000元
    四等奖      红5蓝0           200元
    四等奖      红4蓝1           200元
    四等奖      红4蓝0           200元
    五等奖      红3蓝1           10元
    五等奖      红2蓝1           10元
    六等奖      红1蓝1           5元
    六等奖      红0蓝1           5元
     */
    public static void main(String[] args) {
        // 1,生成中奖号码
        int[] arr = createNumber();
        System.out.println(Arrays.toString(arr));
        // 2,让用户输入号码
        int[] user = userInputNum();
        // 3,验证中奖情况
        int redCount = 0;
        int blueCount = 0;
        // 判断红球
        for (int i = 0; i < user.length - 1; i++) {
            int red = user[i];
            for (int j = 0; j < arr.length - 1; j++) {
                if (red == arr[j]) {
                    redCount++;
                    break;
                }
            }
        }
        // 判断蓝球
        int blue = user[user.length - 1];
        if (blue == arr[arr.length - 1]) {
            blueCount++;
        }
        if (redCount == 6 && blueCount == 1) {
            System.out.println("恭喜中奖一千万!");
        } else if (redCount == 6) {
            System.out.println("恭喜中奖五百万!");
        } else if (redCount == 5 && blueCount == 1) {
            System.out.println("恭喜中奖 三千元!");
        } else if ((redCount == 5) || (redCount == 4 && blueCount == 1) || (redCount == 4 && blueCount == 0)) {
            System.out.println("恭喜中奖 二百元!");
        } else if ((redCount == 3 && blueCount == 1) || (redCount == 2 && blueCount == 1)) {
            System.out.println("恭喜中奖 十元!");
        } else if ((redCount == 1 && blueCount == 1) || (redCount == 0 && blueCount == 1)) {
            System.out.println("恭喜中奖 五元!");
        } else {
            System.out.println("很遗憾,没有中奖,感谢对公益活动的捐款!");
        }
    }

    /**
     * 用来生成中奖号码
     *
     * @return arr
     */
    static int[] createNumber() {
        // 6红1蓝 数组长度 7
        int[] arr = new int[7];
        Random r = new Random();
        // 随机6个生成红球
        for (int i = 0; i < 6; ) {
            int redNum = r.nextInt(33) + 1;
            boolean flay = contains(arr, redNum);
            if (!flay) {
                arr[i] = redNum;
                i++;
            }
        }
        // 生成一个蓝球
        int blueNum = r.nextInt(5) + 1;
        arr[arr.length - 1] = blueNum;

        return arr;
    }

    /**
     * 用来判断数组是否包含某个数
     *
     * @param arr
     * @param num
     * @return boolean
     */
    static boolean contains(int[] arr, int num) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == num) {
                return true;
            }
        }
        return false;
    }

    /**
     * 用来让用户输入号码
     *
     * @return arr
     */
    static int[] userInputNum() {
        int[] arr = new int[6 + 1];
        Scanner sc = new Scanner(System.in);
        // 红球
        for (int i = 0; i < 6; ) {
            System.out.print("请输入第" + (i + 1) + "个红球:");
            int redNum = sc.nextInt();
            if (redNum >= 1 && redNum <= 33) {
                boolean flag = contains(arr, redNum);
                if (!flag) {
                    arr[i] = redNum;
                    i++;
                } else {
                    System.out.println("输入的数字重复了");
                }
            } else {
                System.out.println("输入的数字不在范围内");
            }
        }
        // 蓝球
        while (true) {
            System.out.print("请输入蓝球号码:");
            int blueNum = sc.nextInt();
            if (blueNum >= 1 && blueNum <= 16) {
                arr[arr.length - 1] = blueNum;
                break;
            } else {
                System.out.println("输入的数字不在范围内");
            }
        }
        return arr;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值