Java基础综合练习(飞机票,打印素数,验证码,复制数组,评委打分,数字加密,数字解密,抽奖,双色球)

本文主要是介绍Java基础综合练习(飞机票,打印素数,验证码,复制数组,评委打分,数字加密,数字解密,抽奖,双色球),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

练习一:飞机票

需求:

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

​ 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

代码示例:

package com.itheima.test;import java.util.Scanner;public class Test1 {public static void main(String[] args) {/* 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。*///分析://1.键盘录入机票原价、月份、头等舱或经济舱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();//2.先判断月份是旺季还是淡季//ctrl + alt + M 自动抽取方法if (month >= 5 && month <= 10) {//旺季 //3.继续判断当前机票是经济舱还是头等舱//ticket = getPrice(ticket, seat, 0.9, 0.85);ticket = getTicket(ticket, seat, 0.9, 0.85);} else if ((month >= 1 && month <= 4) || (month >= 11 && month <= 12)) {//淡季//ticket = getPrice(ticket, seat, 0.7, 0.65);ticket = getTicket(ticket, seat, 0.7, 0.65);} else {//表示键盘录入的月份是一个非法数据System.out.println("键盘录入的月份不合法");}System.out.println(ticket);}public static int getTicket(int ticket, int seat, double v, double v2) {if (seat == 0) {//头等舱ticket = (int) (ticket * v);} else if (seat == 1) {//经济舱ticket = (int) (ticket * v2);} else {System.out.println("没有这个舱位");}return ticket;}//1.我要干嘛?根据舱位和折扣来计算最终的票价//2.我干这件事,需要什么才能完成?原价 舱位 头等舱的折扣 经济舱的折扣//3.方法的调用处是否需要继续使用这个结果  需要/*  public static int getPrice(int ticket, int seat, double v0, double v1) {if (seat == 0) {//头等舱ticket = (int) (ticket * v0);} else if (seat == 1) {//经济舱ticket = (int) (ticket * v1);} else {System.out.println("没有这个舱位");}return ticket;}*/
}

练习二:打印素数

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

备注:素数就是质数

代码示例:

package com.itheima.test;public class Test2 {public static void main(String[] args) {//判断 101 ~ 200 之间有多少个素数,并打印所有素数//思路一: 2 ~ 99//定义变量i ,赋值100//判断i是否为质数//定义一个变量用来统计有多少个质数int count = 0;//外循环:遍历101~200这个范围,依次得到这个范围之内的每一个数字for (int i = 101; i <= 200; i++) {//i 依次表示循环中的每一个数字//继续判断i是否为一个质数boolean flag = true;//内循环:判断当前数字是否为一个质数。for (int j = 2; j < i; j++) {//j 表示2~99之间的每一个数字if(i % j == 0){flag = false;//跳出单层循环,内循环break;}}if(flag){System.out.println("当前数字"+i+"是质数");count++;}}System.out.println("一共有" + count + "个质数");/* int i = 7;boolean flag = true;for (int j = 2; j < i; j++) {//j 表示2~99之间的每一个数字if(i % j == 0){flag = false;break;}}if(flag){System.out.println("当前数字是质数");}else{System.out.println("当前数字不是一个质数");}*/}
}

练习三:验证码

需求:

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

验证码格式:

​ 长度为5

​ 前四位是大写字母或者小写字母

​ 最后一位是数字

代码示例:

package com.itheima.test;import java.util.Random;public class Test3 {public static void main(String[] args) {/*   需求:定义方法实现随机产生一个5位的验证码验证码格式:长度为5前四位是大写字母或者小写字母最后一位是数字*///方法://在以后如果我们要在一堆没有什么规律的数据中随机抽取//可以先把这些数据放到数组当中//再随机抽取一个索引//分析://1.大写字母和小写字母都放到数组当中char[] chs = new char[52];for (int i = 0; i < chs.length; i++) {//ASCII码表if(i <= 25){//添加小写字母chs[i] = (char)(97 + i);}else{//27//添加大写字母// A --- 65chs[i] = (char)(65 + i - 26);}}//定义一个字符串类型的变量,用来记录最终的结果String result = "";//2.随机抽取4次//随机抽取数组中的索引Random r = new Random();for (int i = 0; i < 4; i++) {int randomIndex = r.nextInt(chs.length);//利用随机索引,获取对应的元素//System.out.println(chs[randomIndex]);result = result + chs[randomIndex];}//System.out.println(result);//3.随机抽取一个数字0~9int number = r.nextInt(10);//生成最终的结果result = result + number;//打印最终结果System.out.println(result);}
}

练习四:复制数组

需求:

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

代码示例:

package com.itheima.test;public class Test4 {public static void main(String[] args) {/* 需求:把一个数组中的元素复制到另一个新数组中去。*///分析://1.定义一个老数组并存储一些元素int[] arr = {1,2,3,4,5};//2.定义一个新数组的长度跟老数组一致int[] newArr = new int[arr.length];//3.遍历老数组,得到老数组中的每一个元素,依次存入到新数组当中for (int i = 0; i < arr.length; i++) {//i 表示老数组中的索引。新数组中的每一个索引//arr[i]  表示老数组中的元素newArr[i] = arr[i];}//4.新数组中已经存满元素了for (int i = 0; i < newArr.length; i++) {System.out.println(newArr[i]);}}
}

练习五:评委打分

需求 :

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

代码示例:

package com.itheima.test;import java.util.Scanner;public class Test5 {public static void main(String[] args) {//在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。// 选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。//分析://1.定义一个数组,用来存储6名评委的打分(0~100)int[] scoreArr = getScores();for (int i = 0; i < scoreArr.length; i++) {System.out.println(scoreArr[i]);}//2.求出数组中的最大值int max = getMax(scoreArr);//3.求出数组中的最小值int min = getMin(scoreArr);//4.求出数组中6个分数的总和int sum = getSum(scoreArr);//5.(总和 - 最大值 - 最小值 )/4int avg =  (sum - max - min)/(scoreArr.length - 2);//6.打印结果System.out.println("选手的最终得分为:" + avg);}public static int getSum(int[] scoreArr){int sum = 0;for (int i = 0; i < scoreArr.length; i++) {sum = sum + scoreArr[i];}return  sum;}//求数组的最大值public static int getMax(int[] scoreArr){int max = scoreArr[0];for (int i = 1; i < scoreArr.length; i++) {if(scoreArr[i] > max){max = scoreArr[i];}}return max;}//求数组的最小值public static int getMin(int[] scoreArr){int min = scoreArr[0];for (int i = 1; i < scoreArr.length; i++) {if(scoreArr[i] < min){min = scoreArr[i];}}return min;}//1.我要干嘛?定义一个数组,用来存储6名评委的打分(0~100)//2.我需要什么?都不需要//3.干完了这件事情,是否需要返回?必须返回public static int[] getScores(){//定义数组int[] scores = new int[6];//使用键盘录入的形式,输入分数:0~100Scanner sc = new Scanner(System.in);for (int i = 0; i < scores.length; ) {System.out.println("请输入评委的打分");int score = sc.nextInt();//100if(score >=0 && score<= 100){scores[i] = score;i++;}else{System.out.println("成绩超出了范围,继续录入,当前的i为:" + i);}}return  scores;}
}

练习六:数字加密

需求:

​ 某系统的数字密码(大于0),比如1983,采用加密方式进行传输。

规则如下:

​ 先得到每位数,然后每位数都加上5 , 再对10求余,最后将所有数字反转,得到一串新数。

举例:

		1	9	8	3
+5		6   14  13  8
%10		6   4   3   8
反转	   8   3   4   6
加密后的结果就是:8346

代码示例:

package com.itheima.test;public class Test6 {public static void main(String[] args) {/*某系统的数字密码(大于0)。比如1983,采用加密方式进行传输,规则如下:每位数加上5再对10求余,最后将所有数字反转,得到一串新数。
*///分析://1.把整数里面的每一位放到数组当中int[] arr = {1, 9, 8, 3};//2.加密//每位数加上5for (int i = 0; i < arr.length; i++) {arr[i] = arr[i] + 5;}//再对10求余,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 temp = arr[i];arr[i] = arr[j];arr[j] = temp;}//8 3 4 6 --> 8346//3.把数组里面的每一个数字进行拼接,变成加密之后的结果int number = 0;for (int i = 0; i < arr.length; i++) {number = number * 10 + arr[i];}System.out.println(number);}
}

练习六扩展:

package com.itheima.test;public class Test7 {public static void main(String[] args) {//需求://把整数上的每一位都添加到数组当中//反向推导//1.计算出数组的长度int number = 12345;//定义一个变量临时记录number的值,就是为了第三步的时候再次使用int temp = number;//定义一个变量进行统计int count = 0;while(number != 0){//每一次循环就去掉右边的一个数字number = number / 10;//去掉一位计数器就自增一次。count++;}//2.定义数组//动态初始化int[] arr = new int[count];//3.把整数上的每一位都添加到数组当中int index = arr.length -1;while(temp != 0){//12345//获取temp里面的每一位数组int ge = temp % 10;//再去掉右边的那位数字temp = temp / 10;//把当前获取到的个位添加到数组当中arr[index] = ge;index--;}//验证结果  1  2  3  4 5for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
}

练习七:数字解密

把上一题加密之后的数据进行解密

代码示例:

package com.itheima.test;public class Test8 {public static void main(String[] args) {/*某系统的数字密码(大于0)。比如1983,采用加密方式进行传输,规则如下:每位数加上5再对10求余,最后将所有数字反转,得到一串新数。按照以上规则进行解密:比如1983加密之后变成8346,解密之后变成1983*///1.定义数组记录解密之后的结果int[] arr = {8, 3, 4, 6};//2.反转for (int i = 0, j = arr.length - 1; i < j; i++, j--) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}//3.由于加密是通过对10取余的方式进行获取的//所以在解密的时候就需要判断,0~4之间+10  5~9数字不变for (int i = 0; i < arr.length; i++) {if (arr[i] >= 0 && arr[i] <= 4) {arr[i] = arr[i] + 10;}}//4.每一位减5for (int i = 0; i < arr.length; i++) {arr[i] = arr[i] - 5;}//5.获取数组里面的每一位数字拼接成最终的结果int number = 0;for (int i = 0; i < arr.length; i++) {number = number * 10 + arr[i];}System.out.println(number);}
}

练习八:抽奖

需求:

​ 一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)

888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出

解法一:

package com.itheima.test;import java.util.Random;public class Test9 {public static void main(String[] args) {/* 需求:一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)888元的奖金被抽出588元的奖金被抽出10000元的奖金被抽出1000元的奖金被抽出2元的奖金被抽出*///分析://1.定义数组表示奖池int[] arr = {2, 588, 888, 1000, 10000};//2.定义新数组用于存储抽奖的结果int[] newArr = new int[arr.length];//3.抽奖Random r = new Random();//因为有5个奖项,所以这里要循环5次for (int i = 0; i < 5; ) {//获取随机索引int randomIndex = r.nextInt(arr.length);//获取奖项int prize = arr[randomIndex];//判断当前的奖项是否存在,如果存在则重新抽取,如果不存在,就表示是有效奖项boolean flag = contains(newArr, prize);if(!flag){//把当前抽取到的奖项添加到newArr当中newArr[i] = prize;//添加完毕之后,移动索引i++;}}//4.遍历newArrfor (int i = 0; i < newArr.length; i++) {System.out.println(newArr[i]);}}//判断prize在数组当中是否存在//存在:true//不存在:falsepublic static boolean contains(int[] arr,int prize){for (int i = 0; i < arr.length; i++) {if(arr[i] == prize){return true;}}return false;}}

解法二:

package com.itheima.test;import java.util.Random;public class Test10 {public static void main(String[] args) {/* 需求:一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)888元的奖金被抽出588元的奖金被抽出10000元的奖金被抽出1000元的奖金被抽出2元的奖金被抽出*///1.把奖池里面的所有奖项打乱顺序int[] arr = {2, 588, 888, 1000, 10000};Random r = new Random();for (int i = 0; i < arr.length; i++) {//获取随机索引int randomIndex = r.nextInt(arr.length);//拿着i跟随机索引randomIndex上的值进行交换int temp = arr[i];arr[i] = arr[randomIndex];arr[randomIndex] = temp;}//2.遍历奖池,从0索引开始获取每一个奖项for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}

练习九:双色球

在这里插入图片描述

代码示例:

package com.itheima.test;import java.util.Random;
import java.util.Scanner;public class Test11 {public static void main(String[] args) {//1.生成中奖号码int[] arr = createNumber(); // 123456  7System.out.println("=======================");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println("=======================");//2.用户输入彩票号码(红球 + 蓝球)//654321int[] userInputArr = userInputNumber();//3.判断用户的中奖情况//红球 蓝球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 && blueCount == 0){System.out.println("恭喜你,中奖500万");}else if(redCount == 5 && blueCount == 1){System.out.println("恭喜你,中奖3000");}else if((redCount == 5 && blueCount == 0) ||  (redCount == 4 && blueCount == 1)){System.out.println("恭喜你,中奖200");}else if((redCount == 4 && blueCount == 0) ||  (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() {//1.创建数组用于添加用户购买的彩票号码//6个红球 1个蓝球 数组长度:7int[] arr = new int[7];//2.利用键盘录入让用输入Scanner sc = new Scanner(System.in);//让用户输入红球号码for (int i = 0; i < 6; ) {System.out.println("请输入第" + (i + 1) + "个红球号码");int redNumber = sc.nextInt();//redNumber  在1~33  唯一不重复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("请输入篮球号码");//1~16while (true) {int blueNumber = sc.nextInt();if (blueNumber >= 1 && blueNumber <= 16) {arr[arr.length - 1] = blueNumber;break;} else {System.out.println("当前篮球号码超出范围");}}return arr;}public static int[] createNumber() {//1.创建数组用于添加中奖号码//6个红球 1个蓝球 数组长度:7int[] arr = new int[7];//2.随机生成号码并添加到数组当中//红球:不能重复的  1 2 3 4 5 6//蓝球:可以跟红球号码重复 5//生成红球号码并添加到数组当中Random r = new Random();for (int i = 0; i < 6; ) {//获取红球号码int redNumber = r.nextInt(33) + 1;boolean flag = contains(arr, redNumber);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++) {if (arr[i] == number) {return true;}}return false;}
}

这篇关于Java基础综合练习(飞机票,打印素数,验证码,复制数组,评委打分,数字加密,数字解密,抽奖,双色球)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563702

相关文章

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据