Java综合练习

news2024/11/27 13:43:01

Java综合练习

  • 一、涉及到的知识点
  • 二、卖飞机票
  • 三、找质数
  • 四、开发验证码
  • 五、数组元素的复制
  • 六、评委打分
  • 七、数字加密
  • 八、数字解密
  • 九、抢红包
    • 方法一:判断是否被抽取
    • 方法二:打乱数组
  • 十、模拟双色球
  • 土、二维数组

一、涉及到的知识点

  • 变量、数组
  • 运算符
  • 程序流程控制
  • 跳转关键字
  • 方法
  • 键盘录入、随机数

二、卖飞机票

  • 需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
  • 按照如下规则计算机票价格:旺季(5-10月)头等舱九折,经济舱八五折;淡季(11月-来年4月)头等舱七折,经济舱六五折。
import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入机票的原价:");
        int ticket = sc.nextInt();
        System.out.println("请输入当前的月份:");
        int month = sc.nextInt();
        System.out.println("请输入当前购买的舱位 0 头等舱 1 经济舱:");
        int seat = sc.nextInt();

        if (month >= 5 && month <= 10) {
            ticket = getTicket(seat, ticket, 0.9, 0.85);
        } else if ((month >= 1 && month <= 4) || (month >= 11 && month <= 12)) {
            ticket = getTicket(seat, ticket, 0.7, 0.65);
        }else {
            System.out.println("键盘录入的月份不合法");
        }
        System.out.println(ticket);
    }

    public static int getTicket(int seat, int ticket, double x, double x1) {
        if (seat == 0) {
            ticket = (int) (ticket * x);
        } else if (seat == 1) {
            ticket = (int) (ticket * x1);
        }else{
            System.out.println("没有这个舱位");
        }
        return ticket;
    }
}

三、找质数

  • 需求:判断101~200之间有多少个质数,并输出所有质数。
public class Main {
    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 + "个质数");
    }
}

四、开发验证码

  • 需求:定义方法实现随机产生一个5位的验证码。
  • 验证码格式:
    • 长度为5
    • 前四位是大写字母或者小写字母
    • 最后一位是数字
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        String code = getCode();
        System.out.println("验证码是 " + code);
    }

    public static String getCode() {
        String result = "";
        char[] chs = new char[52];
        for (int i = 0; i < chs.length; i++) {
            if (i < 26) {
                chs[i] = (char) (97 + i);
            } else {
                chs[i] = (char) (65 + i - 26);
            }
        }
        Random random = new Random();
        for (int i = 0; i < 4; i++) {
            int randomIndex = random.nextInt(chs.length);
            result += chs[randomIndex];
        }
        int number = random.nextInt(10);
        result += number;
        return result;
    }
}

五、数组元素的复制

  • 需求:把一个数组中的元素复制到另一个新数组中去。
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] oldArr = {1, 2, 3, 4, 5};
        int[] newArr = copyArr(oldArr);
        System.out.println(Arrays.toString(newArr));
    }

    public static int[] copyArr(int[] arr) {
        int[] newArr = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }
}

六、评委打分

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

public class Main {
    public static void main(String[] args) {
        int[] scores = getScores();

        int max = getMax(scores);
        int min = getMin(scores);
        int sum = getSum(scores);
        
        int avg = (sum - max - min) / (scores.length - 2);
        System.out.println("选手的最终得分为:" + avg);
    }

    public static int[] getScores() {
        int[] scores = new int[6];
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < scores.length;) {
            System.out.println("请输入第" + (i + 1) + "个评委的打分:");
            int score = scanner.nextInt();
            if (score >= 0 && score <= 100) {
                scores[i] = score;
                i++;
            } else {
                System.out.println("成绩超出范围,继续录入,当前是" + (i + 1) + "第个评委");
            }
        }
        return scores;
    }

    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }

    public static int getMin(int[] arr) {
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }
        return min;
    }

    public static int getSum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }
}

七、数字加密

  • 需求:某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
  • 规则:先得到每位数,然后每位数都加上5,在对10求余,最后将所有数字反转,得到一串新数。
public class Main {
    public static void main(String[] args) {
        // 定义一个数
        int number = 1983;

        // 计算数字有多少位
        int count = getNumberCount(number);

        // 定义一个数组,元素个数为数字位数
        int[] arr = getArr(number, count);

        // 加密
        int[] encryptArr = encrypt(arr);

        // 拼接
        int result = getResult(encryptArr);

        System.out.println(result);  // 8346
    }

    private static int getResult(int[] encryptArr) {
        int result = 0;
        for (int i = 0; i < encryptArr.length; i++) {
            result = result * 10 + encryptArr[i];
        }
        return result;
    }

    private static int[] encrypt(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + 5;
        }
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] % 10;
        }
        for (int i = 0, j = arr.length-1; i < j; i++,j--) {
            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
        return arr;
    }

    private static int[] getArr(int temp, int count) {
        int[] arr = new int[count];
        // 把数字一个一个塞进数组
        int index = arr.length - 1;
        while (temp != 0) {
            int everyNumber = temp % 10;
            temp = temp / 10;
            arr[index] = everyNumber;
            index--;
        }
        return arr;
    }

    private static int getNumberCount(int number) {
        int count = 0;
        while (number != 0) {
            number = number / 10;
            count++;
        }
        return count;
    }
}

八、数字解密

  • 需求:把上面加密的数据解密。
public class Main {
    public static void main(String[] args) {
        // 定义需要解密的数字
        int number = 8346;
        // 获取位数
        int count = getNUmberCount(number);
        // 把数字塞进数组
        int[] arr = getArr(number, count);
        // 解密
        int result = decode(arr);
        System.out.println(result);  // 1983
    }

    private static int decode(int[] arr) {
        // 反转
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] >= 0 && arr[i] <= 4) {
                arr[i] = arr[i] + 10;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] - 5;
        }

        int result = 0;
        for (int i = 0; i < arr.length; i++) {
            result = result * 10 + arr[i];
        }
        return result;
    }

    private static int[] getArr(int number, int count) {
        int[] arr = new int[count];
        for (int i = 0; i < count; i++) {
            int everyNumber = number % 10;
            number = number / 10;
            arr[count - i - 1] = everyNumber;
        }
        return arr;
    }

    private static int getNUmberCount(int number) {
        int count = 0;
        while (number != 0) {
            number = number / 10;
            count++;
        }
        return count;
    }
}

九、抢红包

  • 需求:一个大V直播抽奖,奖品是现金红包,分别有{2, 588, 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
  • 打印效果如下:
    在这里插入图片描述

方法一:判断是否被抽取

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        int[] arr = {2, 588, 888, 1000, 10000};
        int[] newArr = new int[arr.length];

        Random random = new Random();
        for (int i = 0; i < 5; ) {
            int randomIndex = random.nextInt(arr.length);
            int prize = arr[randomIndex];
            boolean flag = contains(newArr, prize);
            // 如果没有被抽
            if (!flag) {
                newArr[i] = prize;
                i++;
            }
        }
        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i] + "元的奖金被抽出");
        }

    }

    // 判断奖项是否已被抽取
    public static boolean contains(int[] arr, int prize) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == prize) {
                return true;  // 已被抽取
            }
        }
        return false;  // 未被抽取
    }
}

方法二:打乱数组

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        int[] arr = {2, 588, 888, 1000, 10000};
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            int randomIndex = 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]);
        }
    }
}

十、模拟双色球

在这里插入图片描述

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

public class Main {
    public static void main(String[] args) {
        // 生成中奖号码
        int[] arr = createNumber();
        // 用户输入号码
        int[] userInputArr = userInputNumber();

        // 统计有多少个中奖号码
        int redCount = 0;
        int blueCount = 0;

        // 判断红球
        for (int i = 0; i < userInputArr.length - 1; i++) {
            int redNumber = userInputArr[i];
            for (int j = 0; j < arr.length - 1; j++) {
                if (redNumber == arr[j]) {
                    redCount++;
                    break;
                }
            }
        }
        // 判断蓝球
        int blueNumber = userInputArr[userInputArr.length - 1];
        if (blueNumber == arr[arr.length - 1]) {
            blueCount++;
        }

        // 判断中奖情况
        if (redCount == 6 && blueCount == 1) {
            System.out.println("恭喜你,中奖1000万");
        } else if (redCount == 6) {
            System.out.println("恭喜你,中奖500万");
        } else if (redCount == 5 && blueCount == 1) {
            System.out.println("恭喜你,中奖3000");
        } else if (redCount == 5 || redCount == 4 && blueCount == 1) {
            System.out.println("恭喜你,中奖200");
        } else if (redCount == 4 || redCount == 3 && blueCount == 1) {
            System.out.println("恭喜你,中奖10");
        } else if ((redCount == 2 && blueCount == 1) || (redCount == 1 && blueCount == 1) || (redCount == 0 && blueCount == 1)) {
            System.out.println("恭喜你,中奖5");
        }else {
            System.out.println("谢谢参与");
        }
    }

    public static int[] userInputNumber() {
        int[] arr = new int[7];
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 6; ) {
            System.out.println("请输入第" + (i + 1) + "个红球号码:");
            int redNumber = scanner.nextInt();
            if (redNumber >= 1 && redNumber <= 33) {
                boolean flag = contains(arr, redNumber);
                if (!flag) {
                    arr[i] = redNumber;
                    i++;
                } else {
                    System.out.println("当前红球号码已经存在,请重新输入");
                }
            } else {
                System.out.println("当前红球号码超出范围");
            }
        }
        System.out.println("请输入蓝球号码:");
        while (true) {
            int blueNumber = scanner.nextInt();
            if (blueNumber >= 1 && blueNumber <= 16) {
                arr[arr.length - 1] = blueNumber;
                break;
            } else {
                System.out.println("当前蓝球号码超出范围");
            }
        }
        return arr;
    }

    public static int[] createNumber() {
        int[] arr = new int[7];

        // 生成红球号码
        Random random = new Random();
        for (int i = 0; i < 6; ) {
            int redNumber = random.nextInt(33) + 1;
            boolean flag = contains(arr, redNumber);
            if (!flag) {
                arr[i] = redNumber;
                i++;
            }
        }

        int blueNumber = random.nextInt(16) + 1;
        arr[arr.length - 1] = blueNumber;
        return arr;
    }

    public static boolean contains(int[] arr, int number) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == number) {
                return true;
            }
        }
        return false;
    }
}

土、二维数组

在这里插入图片描述

public class Main {
    public static void main(String[] args) {
        int[][] yearArrArr = {
                {22, 66, 44},
                {77, 33, 88},
                {25, 45, 65},
                {11, 66, 99}
        };
        int yearSum = 0;
        for (int i = 0; i < yearArrArr.length; i++) {
            int[] quarterArr = yearArrArr[i];
            int sum = getSum(quarterArr);
            System.out.println("第" + i + "个季度的总营业额为:" + sum);
            yearSum += sum;
        }
        System.out.println("全年总营业额为:" + yearSum);
    }

    public static int getSum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python采集IP代理数据,防止数据采集IP被封情况

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 为什么要IP代理&#xff1a; 当采集数据, 批量采集数据, 请求速度过快, 网站可能会把你IP封掉 <你的网络进不去这个网站> IP代理换一个IP, 再去采集请求数据 一. 抓包分析数据来源 1. 明…

Runtime、ProcessBuilder的区别(Java中,两种方法来启动其他程序)

目录 ■Runtime、ProcessBuilder 区别&#xff1a; ■Java中提供了两种方法来启动其他程序 ■代码 ・Runtime ・ProcessBuilder ■类的方法 ・Process.waitFor()方法 ・Process.getErrorStream()方法 ・Process.redirectErrorStream(true)方法: ■可运行代码 ・java…

解读YOLOv8的改进模块

回顾一下YOLOv5 Backbone&#xff1a;CSPDarkNet结构&#xff0c;主要结构思想的体现在C3模块&#xff0c;这里也是梯度分流的主要思想所在的地方&#xff1b;PAN-FPN&#xff1a;双流的FPN&#xff0c;必须香&#xff0c;也必须快&#xff0c;但是量化还是有些需要图优化才可以…

“数据二十条”发布背后:国企下场探路,技术路径日渐清晰

科技云报道原创。 近日&#xff0c;中共中央、国务院对外发布了《关于构建数据基础制度更好发挥数据要素作用的意见》&#xff08;又称“数据二十条”&#xff09;&#xff0c;为数据要素的流通和使用起到了举旗定向的作用&#xff0c;让从业者都感到振奋。 必须承认的是&…

通信原理与MATLAB(十二):MSK的调制解调

目录1.MSK的调制原理2.MSK的解调原理3.MSK代码4.结果图5.特点1.MSK的调制原理 MSK调制原理如下图所示&#xff0c;基带码元先差分编码&#xff0c;然后经过串并转换分成I、Q两路&#xff0c;再与对应的载波相乘&#xff0c;然后再相加完成QAM的调制。 其中注意:I、Q两路码元分…

【深度学习】LSTM预测股票价格

入行深度学习1年多了&#xff0c;该还的还得还&#xff0c;没接触过LSTM的预测项目&#xff0c;这就来活了。 文章目录前言1. 开工1.1 引入必须的库1.2 数据初探1.3 划分数据集1.4 数据归一化1.5 数据分组1.6 搭建模型1.7 训练1.8 测试集总结前言 LSTM是一个处理时序关联的数据…

数据结构-第七期——并查集的应用(Python)

在学习并查集的应用之前&#xff0c;请大家先学习第六期-并查集的入门 ,这样会比较好理解 真题训练1 合根植物2017年第八届决赛&#xff0c;lanqiao0J题号110 【题目描述】 w 星球的一个种植园&#xff0c;被分成 mn 个小格子&#xff08;东西方向 m 行&#xff0c;南北方向…

dubbo-admin安装

一、dubbo-admin安装 1、环境准备 dubbo-admin 是一个前后端分离的项目。前端使用vue&#xff0c;后端使用springboot&#xff0c;安装 dubbo-admin 其实就是部署该项目。我们将dubbo-admin安装到开发环境上。要保证开发环境有jdk&#xff0c;maven&#xff0c;nodejs 安装n…

基于Python的geopandas库处理矢量几何的教程

前言在许多工作中中&#xff0c;我使用 ArcGIS 平台从事过许多与地理空间相关的项目&#xff0c;我非常喜欢这个平台。 这意味着我可以在具有尖端地理空间技术的项目中进行咨询&#xff0c;例如多维栅格、深度学习和空间物联网自动化。 考虑到这一点&#xff0c;我总是试图跟踪…

openstack增加一个计算节点

1.前言 由于资源有限&#xff0c;所以直接在存储节点&#xff08;block&#xff09;部署 由于存储节点最初只设计了一块网卡&#xff0c;所以需要增加一块网卡&#xff0c;名称为eth1&#xff0c;IP&#xff1a;192.168.200.30编辑ifcfg-eth1&#xff0c;然后重启网络systemct…

【优化】windows双网叠加 多网叠加 网速叠加 教程

【优化】windows双网叠加 多网叠加 网速叠加 教程 1 连接两个以上的网络, 网络不能是同一个 例如 网线-A wifi-B 2 控制面板\所有控制面板项\网络连接 最后 确定保存 同理 修改wifi-B的接口活跃点数为 25 并保存 如果没有生效 可以将两个网络连接禁用 再启用 通过命…

4656. 技能升级

4656. 技能升级 https://www.acwing.com/problem/content/4659/ 第十三届蓝桥杯省赛CC组 算法标签&#xff1a;贪心&#xff1b;多路归并&#xff1b;二分 思路 如果暴力来做的话&#xff0c;会将所有数放到一个集合里面排序&#xff0c;取前 mmm 项之和即可&#xff0c;但时…

Vue3——第六章(侦听器:watch、watchEffect)

一、watch 基本使用 在组合式 API 中&#xff0c;我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数&#xff1a; 二、侦听数据源类型 watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 get…

5.2、运输层端口号、复用与分用的概念

1、端口号 运行在计算机上的进程使用进程标识符PID\color{red}进程标识符 PID进程标识符PID来标志。 因特网上的计算机并不是使用统一的操作系统 不同的操作系统(windows&#xff0c;Linux&#xff0c;Mac OS)又使用不同格式的进程标识符\color{red}不同格式的进程标识符不同…

ThreadLocal 实战应用

1 什么是 ThreadLocal&#xff1f;ThreadLocal 是一个关于创建线程局部变量的类。通常情况下&#xff0c;我们创建的变量是可以被任何一个线程访问并修改的。而使用 ThreadLocal 创建的变量只能被当前线程访问&#xff0c;其他线程则无法访问和修改。ThreadLocal 在设计之初就是…

CDN简单介绍

CDN 介绍 CDN (全称 Content Delivery Network)&#xff0c;即内容分发网络&#xff0c;服务器的静态资源存在CDN服务器上&#xff0c;用户在最近的CDN服务器上获取资源。 从功能上看&#xff0c;典型的 CDN 系统由分发服务系统、负载均衡系统和运营管理系统组成。分发服务系…

我利用 ChatGPT 提高工作效率的 5 种方式

技术应该是我们的朋友&#xff0c;而不是我们的敌人ChatGPT 在 11 月的发布改变了世界。学校阻止该计划&#xff0c;程序员对他们工作中新发现的效率赞不绝口&#xff0c;而创意人员则怀疑他们的工作是否受到威胁。每个人都在想同一个问题&#xff1a;ChatGPT 的未来会是什么样…

IPS+ESPC联动实现安全中心接管

目录 一、IPS介绍 原理 功能 缺陷 二、ESPC介绍 原理 功能 三、NIPSESPC联动 实验目的 实验过程 一、IPS介绍 原理 如今内部威胁增多&#xff0c;外部攻击剧增&#xff0c;防火墙存在着一定的局限性&#xff0c;如&#xff1a;部署在边界处&#xff0c;更多的是对一些…

环境搭建(python+pycharm(anconda可选)

python下载 python下载&#xff0c;由于网站服务器在国外&#xff0c;所以打开可能有点慢&#xff0c;也可以使用国内的镜像网站&#xff08;因为我没有试过&#xff0c;有兴趣的可以去尝试下&#xff0c;此文章的后面部分会有临时换源的操作&#xff09; 电脑位数的查看 …

1277:【例9.21】方格取数——数字三角形模型

【题目描述】 设有NN的方格图&#xff0c;我们在其中的某些方格中填入正整数&#xff0c;而其它的方格中则放入数字0。如下图所示&#xff1a; 某人从图中的左上角A出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&#xff0c;直到到达右下角的B点。在走过的路上&…