文章目录

  • 七、综合练习
    • 买飞机票
    • 找职数
    • 开发验证码
    • 数组元素的复制
    • 评委打分
    • 数字加密
    • 数字解密
    • 抢红包
    • 模拟双色球

七、综合练习

买飞机票

需求

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

  • 按照如下规则计算机票价格:旺季(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) {//分析://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) {//思路一: 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) {//方法://在以后如果我们要在一堆没有什么规律的数据中随机抽取//可以先把这些数据放到数组当中//再随机抽取一个索引//分析://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) {//分析://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求余,最后将所有数字反转,得到一串新数。

package com.itheima.test;public class Test6 {public static void main(String[] args) {//分析://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] + " ");}}
}

数字解密

需求

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

package com.itheima.test;public class Test8 {public static void main(String[] args) {//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) {//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;}}

需求:优化代码

  • 一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。

  • 请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。

  • 打印效果如下:(随机顺序,不一定是下面的顺序)

    • 888元的奖金被抽出
    • 588元的奖金被抽出
    • 10000元的奖金被抽出
    • 1000元的奖金被抽出
    • 2元的奖金被抽出
package com.itheima.test;import java.util.Random;public class Test10 {public static void main(String[] args) {//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基础】Java综合练习相关推荐

  1. Java基础阶段综合练习

    转载文章源地址: Java基础阶段综合练习    https://www.cnblogs.com/hd976521/archive/2017/02/10/6387514.html (转载过来,以备后用 ...

  2. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...

  3. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  4. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...

  5. Java基础——Java多继承的三种实现方式

    Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...

  6. [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别

    [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别 Read 读入方法 read(): 一般是这种形式 public int read() 1.从流数据中读取的 ...

  7. Java基础----Java编程语言概述

    Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...

  8. JAVA基础--JAVA SE(知识点总结 Ⅴ )

    前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...

  9. Java基础-Java中常用的锁机制与使用

    Java基础-Java中常用的锁机制与使用 锁lock或互斥mutex是一种同步机制,主要用于在存在多线程的环境中强制对资源进行访问限制.锁的主要作用为强制实施互斥排他以及并发控制策略.锁一般需要硬件 ...

  10. java基础的综合能力体现,测试你适不适合做程序员

    想入行,别着急,测试下自己到底适不适合入行,你跟程序员之间也许就只差个测试. 测试链接: https://www.bilibili.com/video/av52519027 根据本人多年从业以及学习经 ...

最新文章

  1. mysql 压力测试脚本
  2. uva LCD-Display
  3. 【Binder 机制】AIDL 分析 ( 创建 Service 服务 | 绑定 Service 远程服务 )
  4. SOCK_DGRAM(数据报套接字)与SOCK_STREAM(流套接口)的区别
  5. 【BIM入门实战】Revit 2018墙体绘制—别墅地下室
  6. android方块密码输入框,Android仿微信/支付宝的方块密码输入框
  7. c++ max函数_「C/C++」函数:定义、调用、参数传递
  8. (60)FPGA比较器实现(function)
  9. 《Javascript入门学习全集》 Javascript学习第一季(7)
  10. java泛型的英文_Java泛型一:泛型的定义及规则
  11. 【Multisim仿真】74LS193+74LS138流水灯
  12. python基础读后感_Python基础教程【读书笔记】 - 2016/7/4
  13. Multiple primary key defined
  14. 名帖204 蔡襄 行书《行书帖选》
  15. 企业微信批量导入用户
  16. 谣言检测论文精读——11.PAKDD2020-SAFE: Similarity-Aware Multi-Modal Fake News Detection
  17. QT5串口编程——编写简单的上位机
  18. 软件升级包封装方法以及软件升级方法
  19. 美摄SDK 局部特效接入文档
  20. python发短信 金山_Python爬虫基础练习(四) 金山翻译爬取(进阶篇)

热门文章

  1. c语言 求奇数和
  2. 计算机电源指示灯量一下就灭,开机硬盘指示灯闪了一下就不亮是怎么回事
  3. 【web设计居家必备】迷你图标大集合
  4. 未启用对服务器的远程访问
  5. 解决git push 中remote: Permission to xxxxx.git denied to xxx. fatal: unable to acce
  6. 吕爱国倾心讲座:混合方法研究的类型与程序设计
  7. 基于snipe-it v5.1.2开源资产管理软件二次开发安卓端管理app
  8. 【MineCraft】-- 如何开设我的世界服务器
  9. mac 删除Microsoft office word中的空白页的方法
  10. (转)C#中两个问号和一个问号 ??