java基础知识——12.小练习

这篇文章就是主要做一些算法小练习用的

1.求机票价格

题目如下:

需求:机票价格按照淡旺季,头等舱经济舱来收费。输入机票原价,淡旺季,头等舱或经济舱来获取机票价格

规则如下:旺季(5-10)头等舱9折,经济舱8.5折;淡季(11-来年4月)头等舱7折,经济舱6.5折

代码如下:

public class Test1 {
    /**
     * 需求:机票价格按照淡旺季,头等舱经济舱来收费。输入机票原价,淡旺季,头等舱或经济舱来获取机票价格
     * 规则如下:旺季(5-10)头等舱9折,经济舱8.5折;淡季(11-来年4月)头等舱7折,经济舱6.5折
     *
     * */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入月份:");
        int month = scanner.nextInt();
        System.out.print("头等舱请输1,经济舱请输2:");
        int a = scanner.nextInt();
        System.out.print("请输入机票原价:");
        double ticket = scanner.nextDouble();

        if (month >= 5 && month <= 10 && a==1)
            ticket = ticket * 0.9;
        else if (month > 5 && month <= 10 && a==2)
            ticket = ticket * 0.85;
        else if (((month >= 11 && month <= 12) ||  (month <= 4 && month >= 1)) && a==1 )
            ticket = ticket*0.7;
        else if (((month >= 11 && month <= 12) ||  (month <= 4 && month >= 1)) && a==2 )
            ticket = ticket*0.65;

        System.out.println("机票价格为:"+ticket);

        /**   写法二,就是将条件判断提取出来了
        if (month >= 5 && month <= 10 && a==1)
            ticket = ticket * 0.9;
        else if (month > 5 && month <= 10 && a==2)
            ticket = ticket * 0.85;
        else if ((month >= 11 && month <= 12) ||  (month <= 4 && month >= 1) ){
            if (a==1)
                ticket = ticket*0.7;
            else if (a == 2)
                ticket = ticket*0.65;
        }
        */

        /**
         错误写法:后面的两个else if的条件判断出现了问题
         if (month >= 5 && month <= 10 && a==1)
            ticket = ticket * 0.9;
         else if (month >= 5 && month <= 10 && a==2)
            ticket = ticket * 0.85;
         else if ((month >= 11 && month <= 12) ||  (month <= 4 && month >= 1) && a==1 )
            ticket = ticket*0.7;
         else if ((month >= 11 && month <= 12) ||  (month <= 4 && month >= 1) && a==2)
            ticket = ticket*0.65;

        */


    }
}

结果如下:

 解析:

这题很简单,但最开始还是出现了问题。重点就是注意条件判断,小括号的使用,或者使用分层来进行条件判断(等同于小括号的作用),条件较为复杂时,不要堆砌在一起。

拓展:

idea中,选中一块代码块,按Ctrl+Alt+M是自动提取方法

2.找质数

题目如下:

判断101~200之间有多少个素数,并输出所有的素数

代码如下:

public class Test2 {
    public static void main(String[] args) {

        int num = 99;

        for (int i = 101; i < 200; i++) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    System.out.println(i + "不是一个质数");
                    num--;
                    break;
                }
            }
        }
        System.out.println("101~200间共有"+num+"个质数");

    }
}

结果如下:

解析:

下面详细的说一下这题。

首先,求质数的方法。方法一:让该数除以2到(该数-1)的所有数,有余数为0的,那么它就不是质数,余数全都不为0,那么它就是质数。方法二:让该数除以2到该数的平方根的所有数,如果余数全都不为0,那么该数就位质数

上面代码有两点需要说明一下。第一点,为什么内层的 if 判断不用一个else?因为这是一个存在性问题,不是全都问题,一旦加上else,但凡有一个余数不为0,那么就要执行else下面的语句,这是不对的。第二点:在多层循环中,break是跳出自己所在层的循环,不是跳出全部循环。

3.生成随机验证码

题目如下:

需求:定义方法实现随机产生一个5位的验证码

验证码格式:长度为5;前四位为大写或小写字母;最后一位为数字

代码如下:

import java.util.Random;

public class Test3 {
    public static void main(String[] args) {
        char[] chs = new char[52];
        for (int i = 0; i < chs.length; i++) {
            if (i <= 25)
                chs[i] = (char) (97 + i);
            else
                chs[i] = (char) (65 + i - 26);
        }
        
        String result = "";
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int randomIndex = r.nextInt(chs.length);
            result = result + chs[randomIndex];
        }
        
        result = result + r.nextInt(10);
        System.out.println(result);
    }
}

结果如下:

 

解析:这题其实没啥好说的,就是一个用数组来存储字母,ASCII表,然后随机数,字符串拼接,就是这四点东西。但题目还是比较新颖有趣的

4.双色球系统 

题目如下:

要求:用java进行模拟 

代码如下:



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

public class Test4 {
    public static void main(String[] args) {
        //生成中奖号码
        int[] arr = creatNumber();
        //打印输出,方便测试
        System.out.println("==================");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        System.out.println("==================");

        //让用户输入彩票号码
        int[] userArr = userInputNumber();

        //判断中奖,记录蓝球和红球的个数
        int redCount = 0;
        int blueCount = 0;

        //先遍历用户输入的
        for (int i = 0; i < userArr.length-1; i++) {
            //记录用户输入的
            int redNumber = userArr[i];
            //将用户输入的与中奖号码进行比对
            for (int j = 0; j < arr.length-1; j++) {
                //如果存在,那么红球数加1,并跳出循环,判断用户输入的下一个
                if (redNumber == arr[j]){
                    redCount++;
                    break;
                }
            }
        }

        //判断蓝球的数量
        int blueNumber = userArr[userArr.length-1];
        if (blueNumber == arr[arr.length-1])
            blueCount++;

        //根据红篮球的数量来判断中奖等级
        if (redCount == 6 && blueCount == 1) {
            System.out.println("中1等将");
        }else if (redCount == 6 && blueCount == 0){
            System.out.println("中2等将");
        }else if (redCount == 5 && blueCount == 1){
            System.out.println("中3等将");
        }else if ((redCount == 5 && blueCount == 0) || (redCount == 4 && blueCount == 1)){
            System.out.println("中4等将");
        }else if ((redCount == 4 && blueCount == 0) || (redCount == 3 && blueCount == 1)){
            System.out.println("中5等将");
        }else if ((redCount == 2 && blueCount == 1) || (redCount == 1 && blueCount == 1)|| (redCount == 0 && blueCount == 1)){
            System.out.println("中6等将");
        }else
            System.out.println("未中奖");

    }

    //生成中奖号码
    public static int[] creatNumber(){
        //定义存储中奖号码的数组arr,6个红+1个蓝=7
        int[] arr = new int[7];
        Random r = new Random();

        //生成红球号码并添加到数组中
        for (int i = 0; i < 6; ) {
            //生成随机数
            int redNumber = r.nextInt(33)+1;
            //判断新生成的数是否与数组中已添加的数重复
            boolean flag = contains(arr,redNumber);
            //如果不重复,就添加,此时索引才实现加1,即继续生成数组中的下一个数
            if(!flag){
                arr[i] = redNumber;
                i++;
            }
        }

        //生成蓝球号码
        int blueNumber = r.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++) {
            //如果重复就返回true
            if (arr[i] == number)
                return true;
        }
        return false;
    }

    //用户输入号码
    public static int[] userInputNumber(){
        int[] arr = new int[7];
        Scanner sc = new Scanner(System.in);
        //输入红球号码
        for (int i = 0; i < 6; ) {
            System.out.println("请输入第"+(i+1)+"个号码");
            int redNumber = sc.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 = sc.nextInt();
            if (blueNumber >= 1 && blueNumber <= 16){
                arr[arr.length-1] = blueNumber;
                break;
            }else
                System.out.println("当前号码超出范围,请重新输入!");
        }
        return arr;
    }
}

结果如下:

解析:这题其实难度一般,就是比较复杂,工程比较繁琐。具体思路可以看代码中的注释

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【 Bean 作⽤域和⽣命周期 】

文章目录引用一、认识 Bean的作用域二、作⽤域定义三、Bean 的 6 种作⽤域四、Bean 原理分析4.1 Bean 执行流程4.2 Bean ⽣命周期引用 从前⾯的课程我们可以看出 Spring 是⽤来读取和存储 Bean&#xff0c;因此在 Spring 中 Bean 是最核⼼的操作资源&#xff0c;所以接下来我们…

你真的会写 git commit message 吗?

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

用GPT-4写代码不用翻墙了?Cursor告诉你:可以~~

目录 一、介绍 二、使用方法 三、其他实例 1.正则表达式 2.自动化测试脚本 3.聊聊技术 一、介绍 Cursor主要功能是根据用户的描述写代码或者进行对话&#xff0c;对话的范围仅限技术方面。优点是不用翻墙、不需要账号。Cursor基于GPT模型&#xff0c;具体什么版本不祥&#…

Powershell脚本自动化登录网站的简单实例,命令行方式实现Http(s)的GET、POST请求

自动化登录网站的流程比较简单&#xff0c;如果不懂 Python、JavaScript、C 等编程语言&#xff0c;又没有安装这些编程语言环境软件&#xff0c;我们还要新的点子&#xff1a;用Windows系统自带的 Powershell 运行自编的脚本来实现。 PowerShell 是一种功能强大的自动化工具&…

大型软件外包项目的开发流程

与中小型软件项目相比&#xff0c;大型软件项目的管理和开发难度更大&#xff0c;需要在开发过程中严格执行软件的项目管理流程&#xff0c;不能有比较明显的问题&#xff0c;有问题也要及时解决。软件项目的开发过程环环相扣&#xff0c;如果在前流程中有明显问题&#xff0c;…

【fluent UDF】保留UDM变量Reserving UDM Variables Using Reserve_User_Memory_Vars-测试分析篇

一、问题背景 因为对Reserve_User_Memory_Vars这个函数比较陌生&#xff0c;在学习官方文档过程中发现难以理解&#xff0c;于是只好亲手在fluent 2022上测试一番。 直接上结论&#xff1a; 此保留函数运行一次后&#xff08;设置GUI界面中的UDM数目第一次加载共享库成功&…

【从零开始学习 UVM】3.8、UVM TestBench架构 —— UVM Agent [uvm_agent]

文章目录 什么是 UVM Agent?所有的Agent Type是什么?如何确定UVM Agent是主动还是被动的?创建UVM代理的步骤一个UVM代理做什么?如何将UVM代理配置为主动或被动?一个UVM Agent例子推荐做法什么是 UVM Agent? 一个 Agent 将Sequencer、Driver和Monitor封装成一个单一实体,…

图像分类的划分数据,dataset和dataloader的实现

目录 1. 介绍 2. 主函数代码 2. utils 模块代码 2.1 划分数据集 2.2 可视化数据集 3. dataset 数据处理 4. collate_fn 5. other 1. 介绍 图像分类一般来说不需要自定义的dataSet&#xff0c;因为pytorch自定义好的ImageFolder可以解决大部分的需求&#xff0c;更多的…

springBoot --- mybatisPlus自动生成代码

mybatisPlus自动生成代码mybatisPlus自动生成代码pom.xmlapplication.yml自动生成代码测试主启动类生成目录结果使用插件 --- 版本要求&#xff1a;3.4.0 版本以上pom.xml更新mybatisplus插件版本mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.…

Linux系统中使任务后台挂起不停止的命令

在使用远程SSH连接工具时&#xff0c;退出工具时任务也停止&#xff0c;相当于远程连接工具在系统开启了一个Terminal终端&#xff0c;服务也会随着终端的中断而停止。Linux系统也提供了服务基于后台运行的命令&#xff0c;是独立于终端的进程。 nohup Linux nohup Linux no…

【Python】仅7行代码实现自动化天气报时

文章目录前言一、实现步骤二、请求天气接口1.引入库2.读入数据3.钉钉通知天气预报总结前言 早上出门上班前&#xff0c;我总是忘记查看天气预报&#xff0c;以至于通勤路上下雨来了个措手不及。 回想起来&#xff0c;大部分人早上出门前的行为模式是固定的&#xff0c;那么有…

一个基于stream的EPICS IOC应用程序

本文将介绍如何开发一个基于stream的EPICS IOC应用程序&#xff0c;其将作为一个简单的基于消息的设备&#xff08;用于EPICS stream练习的设备模拟程序_yuyuyuliang00的博客-CSDN博客中最后一个python程序模拟的设备)的IOC控制程序。 1&#xff09; 按如下步骤建立这个IOC程序…

vb+access大气污染模型系统

数据模型就是按专业的要求&#xff0c;用数字方式描述自然界的事物或现象以及他们的关系。 我们通过对地区的具体数值和情况的观察&#xff0c;对大气质量状况做出分析&#xff0c;建立一个符合当地情况的大气污染模型&#xff0c;用来测量大气污染浓度&#xff0c;并根据污染…

在公司兢兢业业5年,被新来的自动化测试倒挂了薪资…

去年年中朋友左思右想从工作了 5 年的企业离职&#xff0c;离职原因很简单&#xff0c;待疲了&#xff0c;薪资也没咋涨过&#xff0c;新来的自动化测试钱比 Ta 高一倍。但离职 Ta 还是很忐忑的&#xff0c;在这个公司待得久了&#xff0c;自己会的东西一直是那些&#xff0c;业…

Python3爬虫图片抓取

在上一章中&#xff0c;我们已经学会了如何使用Python3爬虫抓取文字&#xff0c;那么在本章教程中&#xff0c;将通过实例来教大家如何使用Python3爬虫批量抓取图片。注&#xff1a;该网站目前已经更换了图片的请求方式&#xff0c;以下爬虫方法只能作为思路参考&#xff0c;已…

【Linux】进程理解与学习-程序替换

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅 相关文章推荐&#xff1a; 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念 【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学…

想拿到10k-40k的offer,这些技能必不可少!作为程序员的你了解吗

总结了一份Java架构师的技能树&#xff0c;希望对Java编程的同学有点帮助 Java编程的技术点&#xff1a; ​ 计算机基础 ​ Java高级特性 设计模式 ​ 数据库 分布式系统 ​ 注意&#xff1a;下文主要是我个人的总结方法经验&#xff08;面试学习和刷题笔记&#xff09; 01…

aws codedeploy 在ec2实例和autoscaling组上进行蓝绿部署

参考资料 https://docs.amazonaws.cn/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.htmlhttps://docs.amazonaws.cn/zh_cn/codedeploy/latest/userguide/applications.html为 EC2/本地蓝/绿部署创建部署组&#xff08;控制台&#xff09; 部署ec2比较…

面试角度看问题:消息队列详解(万字长文,绝对值得一看)

面试角度看问题&#xff1a;消息队列详解前言一、消息队列是什么&#xff1f;二、为什么要使用消息队列&#xff1f;1.解耦2.异步3.削峰三、消息队列有什么缺点&#xff1f;1.系统可用性降低2.系统复杂度提高3.一致性问题四、如何保证消息队列的高可用&#xff1f;1.RabbitMQ 的…

zookeeper

目录 1.软件架构的发展 2.了解zookeeper 2.1概述 2.2zookeeper的应用场景 2.3安装zookeeper 2.4zookeeper客户端命令 3.zookeeper简单操作 3.1zookeeper的数据结构 3.2节点的分类 3.3java代码操作zookeeper节点 3.4zookeeper的watch机制 3.4.1介绍 3.4.2NodeCache…