当前位置:   article > 正文

JavaSE基础——练习题

JavaSE基础——练习题

不积跬步无以至千里;不积小流无以成江海。

涉及到的知识点:

  • 变量、数组
  • 运算符:基本运算符、关系运算符、逻辑运算符......
  • 程序流程控制:if、switch;for、while;死循环、嵌套循环
  • 跳转关键字:break、continue、return。
  • 方法等等

1、需求:机票价格按淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。机票的最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折;淡季(11月到来年4月)头等舱7折,经济舱6.5折。

  1. public static void main(String[] args) {
  2. //需求:机票价格按淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
  3. //机票的最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折;
  4. // 淡季(11月到来年4月)头等舱7折,经济舱6.5折。
  5. Scanner sc = new Scanner(System.in );
  6. //1、让用户输入机票原价,月份,舱位类型
  7. System.out.println("请输入机票原价: ");
  8. double money = sc.nextDouble();
  9. System.out.println("请输入月份(1-12月): ");
  10. int month = sc.nextInt();
  11. System.out.println("请输入舱位类型:头等舱/经济舱: ");
  12. String type = sc.next();
  13. // 4、调用方法统计结果:
  14. System.out.println("机票优惠后的价格是: " + calc(money,month,type));
  15. }
  16. /**
  17. 2、定义方法接收信息,统计优惠后的价格返回
  18. */
  19. public static double calc(double money , int month , String type){
  20. //3、判断用户选择的信息情况
  21. if (month >= 5 && month <=10){
  22. //旺季
  23. switch (type){
  24. case "头等舱" :
  25. money *=0.9; // money = money * 0.9;
  26. break;
  27. case "经济舱" :
  28. money *=0.85; // money = money * 0.8;
  29. break;
  30. default:
  31. System.out.println("您输入的舱位类型有误--");
  32. money = -1; //表示当前无法计算价格!
  33. }
  34. }else if (month == 11||month == 12 || month >=1 && month <=4){
  35. //淡季
  36. switch (type) {
  37. case "头等舱":
  38. money *= 0.7; // money = money * 0.7;
  39. break;
  40. case "经济舱":
  41. money *= 0.65; // money = money * 0065;
  42. break;
  43. default:
  44. System.out.println("您输入的舱位类型有误--");
  45. money = -1; // 表示当前无法计算价格!
  46. }
  47. }else{
  48. System.out.println("对不起,您输入的月份有问题---");
  49. money = -1; // 表示当前无法计算价格!
  50. }
  51. return money; //最终的价格。
  52. }

2、找素数。判断101-200之间有多少素数,并输出所有素数 素数:只能被1和它本身整除,不能被其他正整数整除。

  1. /*
  2. 分析:101-200采用循环可以拿到,每拿到一个数,判断它是否是素数
  3. 判断规则:从2开始遍历到该数字的一半的数据,看有没有数据能整除它,如果有,不是素数;如果没有,是素数。
  4. */
  5. public static void main(String[] args) {
  6. // 1、定义一个循环,找到101 到200之间的全部数据
  7. for (int i = 101; i <= 200; i++) {
  8. // i= 101 102 。。。。。200
  9. //信号位:标记
  10. boolean flag = true;//一开始认为当前数据是素数。
  11. //2、判断当前遍历的这个数据是否是素数
  12. for (int j = 2; j < i/ 2; j++) {
  13. if (i % j == 0){
  14. flag = false;
  15. break;
  16. }
  17. }
  18. //3、根据判断的结果选择是否输出这个数据,是素数则输出
  19. if (flag){
  20. System.out.print(i + "\t");
  21. }
  22. }
  23. }

3、开发验证码:需求:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

  1. 分析:1、定义一个方法,生成验证码返回:方法参数是位数,方法的返回值类型是String。
  2. 2、方法内部,使用for循环生成指定位数的随机字符,并连接。
  3. 3、把连接好的随机字符作为一组验证码返回
  4. */
  5. public static void main(String[] args) {
  6. //5、调用生成验证码的方法
  7. String code = Code(5);
  8. System.out.println("生成验证码是:" + code);
  9. // System.out.println(Code(5));//简写
  10. }
  11. //1、定义一个方法,生成验证码返回,方法参数为:int a 返回值类型为String。
  12. //num指的是几位验证码
  13. public static String Code (int a ){
  14. //定义一个字符串接随机生成的字母或数字
  15. String code = "";
  16. //2、遍历num位数的随机字符char
  17. for (int i = 0; i < a; i++) {
  18. Random r = new Random();
  19. //3、随机生成三种(数字1,大写字母2,小写字母3)
  20. int type = r.nextInt(3)+1;
  21. //4、使用switch,1时生成数字,2时生成大写字母,3时生成小写字母。
  22. switch (type){
  23. case 1:
  24. code += r.nextInt(10);//0-9
  25. break;
  26. case 2:
  27. //使用强制类型转换,转换成char类型。
  28. char letter1 = (char)(r.nextInt(26)+65);//大写字符(A:65 Z:65+25) (0-25) + 65
  29. code += letter1;
  30. break;
  31. case 3:
  32. //使用强制类型转换,转换成char类型。
  33. char letter2 = (char)(r.nextInt(26)+97);//小写字符(a:97 z:97+25) (0-25) + 97
  34. code += letter2;
  35. break;
  36. }
  37. }
  38. return code;
  39. }

4、数组元素复制。需求:把一个数组中的元素复制到另一个新数组中去

  1. 分析:1、定义一个打印数组的方法
  2. 2、定义一个复制数组的方法。输入原始数组的长度,将原始数组的元素复制给新数组
  3. 两个方法都没有返回值类型
  4. 3、调用方法实现数组复制
  5. */
  6. public static void main(String[] args) {
  7. int arr1 [] = {11,22,33,44,55,66};
  8. int arr2 [] = new int[arr1.length];
  9. copy(arr1,arr2);
  10. printArray(arr1);
  11. printArray(arr2);
  12. }
  13. //1、打印数组的方法
  14. public static void printArray(int arr[]){
  15. System.out.print("[");
  16. for (int i = 0; i < arr.length; i++) {
  17. System.out.print(arr[i] + "\t");//\t代表空格的意思。
  18. }
  19. System.out.println("]");
  20. }
  21. //2、复制的方法
  22. //a是指数组的长度
  23. public static void copy(int arr1[] , int arr2 []){
  24. //数组复制
  25. for (int i = 0; i < arr2.length; i++) {
  26. arr2[i] = arr1[i];
  27. }
  28. }

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

  1. /**
  2. * 分析:1、使用数组,接到六名评委的打分分数范围为0-100
  3. * 2、定义变量:得分之和sum,最高分max,最低分min
  4. * 遍历数组,求和。在找出最高分和最低分
  5. * 3、输出最后得分为sum - max - min /数组长度-2
  6. */
  7. public static void main(String[] args) {
  8. Scanner sc = new Scanner(System.in);
  9. //1、定义一个长度为6的数组
  10. int array [] = new int[6];
  11. //2、遍历数组,输入打的分数
  12. for (int i = 0; i < array.length; i++) {
  13. System.out.println("输入第" + (i+1) + "位评委的打分(0-100之间的整数):");
  14. array[i] = sc.nextInt();//把输入的数,存入到相应索引的位置上去。
  15. }
  16. printArray(array);//可以打印出来数组看一下。
  17. //3、定义变量:得分之和sum,最高分max,最低分min
  18. int sum = 0;
  19. int max = array[0];
  20. int min = array[0];//默认最大值和最小值都是数组里的第一个值。
  21. for (int i = 0; i < array.length; i++) {
  22. sum += array[i];//遍历数组求和
  23. //找数组里的最大值:
  24. if (array[i] > max){
  25. max = array[i];//替换最大值变量里的值
  26. }
  27. //找数组里的最小值:
  28. if (array[i] < min){
  29. min = array[i];//替换最小值变量里的值
  30. }
  31. }
  32. //4、统计平均分即可
  33. double result = (sum - max - min) / (array.length-2);
  34. System.out.println("去掉一个最高分,去掉一个最低分,选手的最后得分为:" + result);
  35. }
  36. //打印数组的方法
  37. public static void printArray(int arr[]){
  38. System.out.print("[");
  39. for (int i = 0; i < arr.length; i++) {
  40. System.out.print(arr[i] + "\t");//\t代表空格的意思。
  41. }
  42. System.out.println("]");
  43. }

6、需求:数据加密:某系统的数字密码:比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上5, 再对10求余,最后将所有数字反转,得到一串新数。

  1. /**
  2. * 1 9 8 3
  3. * +5 6 14 13 8
  4. * %10 6 4 3 8
  5. * 反转 8 3 4 6
  6. */
  7. /*、
  8. 思考,如何给数字解密呢???
  9. */
  10. public static void main(String[] args) {
  11. //1、定义一个数组存入要加密的数字
  12. Scanner sc = new Scanner(System.in);
  13. System.out.println("请输入您要加密的数字的位数:");
  14. int num = sc.nextInt();
  15. //定义一个num位长度的数组
  16. int array [] = new int[num];
  17. //2、遍历数组将要加密的数字放进去
  18. for (int i = 0; i < array.length; i++) {
  19. System.out.println("请输入要加密的第" + (i+1) + "个数字(1-9):");
  20. array[i] = sc.nextInt();
  21. }
  22. // printArray(array);//可以打印出来数组看一下//[1 9 8 3 ]
  23. //3、将数组中的数字进行加密
  24. for (int i = 0; i < array.length; i++) {
  25. //每位数加5
  26. array[i] += 5;
  27. //对10取余
  28. array[i] %= 10;
  29. }
  30. // printArray(array);//[6 4 3 8 ]
  31. // i j
  32. //4、将所有数字反转(换数组元素的位置)重点
  33. //定义两个变量i和j ,分别在数组的首尾位置
  34. //i变量往后走,j变量往前走,同步交换双方位置处的值
  35. //当i < j时停止交换。
  36. for (int i = 0 , j = array.length-1 ; i < j; i++ , j--) {
  37. //交换两者位置的值。
  38. int temp = array[j];
  39. array[j] = array[i];
  40. array[i] = temp;
  41. }
  42. printArray(array);//[8 3 4 6 ]
  43. }
  44. //打印数组的方法
  45. public static void printArray(int arr[]){
  46. System.out.print("[");
  47. for (int i = 0; i < arr.length; i++) {
  48. System.out.print(arr[i] + "\t");//\t代表空格的意思。
  49. }
  50. System.out.println("]");
  51. }

7、案例:双色球系统-业务分析、随机生成一组中奖号码

投注号码由6个红色球号码和1个蓝色球号码组成。

红色球号码从1-33中选择;蓝色球号码从1-16中选择。

中奖条件和奖金表: 

一等奖:红球命中6个,蓝球命中1个:最高1000万 ;

二等奖:红球命中6个,蓝球命中0个:最高500万 ;

三等奖:红球命中5个,蓝球命中1个:3000元 ;

四等奖:红球命中4个,蓝球命中1个或者红球命中5个,蓝球命中0个:200元 ;

五等奖:红球命中3个,蓝球命中1个或者红球命中4个,蓝球命中0个:10元 ;

六等奖:红球命中3个以下,蓝球命中1个:5元。

  1. //1、随机生成一组中奖号码的方法
  2. //2、定义一个用户输入投注号码的方法
  3. //3、对比用户投注号码与中奖号码,得到命中红球和蓝球的个数
  4. //4、根据命中个数输出获得什么奖项
  5. public static void main(String[] args) {
  6. //1、
  7. int [] luckNumber = winningNumber();
  8. //2、
  9. int [] userNumber = usersNumber();
  10. //3、
  11. result(luckNumber,userNumber);
  12. }
  13. //3、对比用户投注号码与中奖号码,得到命中红球和蓝球的个数,根据命中个数输出获得什么奖项
  14. public static void result (int[] arr1 , int [] arr2){
  15. /*
  16. 对比用户投注号码与中奖号码
  17. [24 33 18 13 9 32 8 ]
  18. [24 33 18 13 9 32 8 ]
  19. */
  20. //用两个变量接红球和蓝球个数
  21. int redBallNum = 0;
  22. int blueBallNum = 0;
  23. //比较红球号码相同的个数
  24. for (int i = 0; i < arr1.length-1; i++) {
  25. for (int j = 0; j < arr2.length-1; j++) {
  26. if (arr1[i] == arr2[j]){
  27. redBallNum += 1;
  28. break;
  29. }
  30. }
  31. }
  32. //判断蓝球相同不
  33. /*if (arr1[arr1.length-1] == arr2[arr2.length-1]){
  34. blueBallNum = 1;
  35. }else{
  36. blueBallNum = 0;
  37. }*/
  38. blueBallNum = arr1[arr1.length-1] == arr2[arr2.length-1] ? 1 : 0 ;
  39. System.out.println("中奖号码是:");
  40. printArray(winningNumber());//打印随机的中奖号码看一下
  41. System.out.println("您投注的号码是:");
  42. printArray(usersNumber());//打印用户投注的号码看一下
  43. System.out.println("您命中的红球数量为:" + redBallNum);
  44. System.out.println("您是否命中蓝球:" + (blueBallNum == 1? "是":"否"));
  45. if (redBallNum == 6 && blueBallNum == 1){
  46. System.out.println("恭喜您,中了一等奖,最高1000万。");
  47. }else if (redBallNum == 6 && blueBallNum == 0){
  48. System.out.println("恭喜您,中了二等奖,最高500万。");
  49. }else if (redBallNum == 5 && blueBallNum == 1){
  50. System.out.println("恭喜您,中了三等奖,3000元。");
  51. }else if ((redBallNum == 4 && blueBallNum == 1) || (redBallNum == 5 && blueBallNum == 0)){
  52. System.out.println("恭喜您,中了四等奖,200元。");
  53. }else if ((redBallNum == 3 && blueBallNum == 1) || (redBallNum == 4 && blueBallNum == 0)){
  54. System.out.println("恭喜您,中了五等奖10元。");
  55. }else if (redBallNum < 3){
  56. System.out.println("恭喜您,中了六等奖5元。");
  57. }else{
  58. System.out.println("感谢你为彩票事业做出的贡献,您本次没有中奖。");
  59. }
  60. }
  61. //2、定义一个用户输入投注号码的方法
  62. public static int [] usersNumber(){
  63. //1、定义一个7位的数组接用户猜测的七位数字
  64. int [] numbers = new int[7];
  65. //2、用户输入猜测的红球数字
  66. Scanner sc = new Scanner(System.in);
  67. for (int i = 0; i < numbers.length-1; i++) {
  68. System.out.println("请输入您猜测的第" +(i+1)+ "个红球数字(1-33)(要求不重复):");
  69. numbers[i] = sc.nextInt();
  70. }
  71. //2、用户输入猜测的蓝球数字
  72. System.out.println("请输入您猜测的蓝球数字(1-16):");
  73. numbers[numbers.length-1] = sc.nextInt();
  74. return numbers;
  75. }
  76. //1、随机生成一组中奖号码的方法
  77. public static int [] winningNumber(){
  78. Random r = new Random();
  79. //1、定义一个数组接一个中奖的七位号码
  80. int numbers [] = new int[7];
  81. //2、遍历数组,随机生成中奖的号码(红球)(1-33):
  82. for (int i = 0; i < numbers.length-1; i++) {
  83. /* numbers[i] = r.nextInt(33)+1;
  84. //判断它是否重复方法1
  85. for (int j = 0; j < i; j++) {
  86. if (numbers[i] == numbers[j]){
  87. i--;
  88. break;
  89. }
  90. }*/
  91. //判断是否重复方法2
  92. while (true){
  93. //定义一个临时数据生成随机数
  94. int data = r.nextInt(33)+1;
  95. //定义一个标记位
  96. Boolean flag = true;
  97. for (int j = 0; j < i; j++) {
  98. if (data == numbers[j]){
  99. //数字重复时,输出false
  100. flag = false;
  101. break;
  102. }
  103. }
  104. //说明没有重复数字,可以将数据放到数组里去了
  105. if (flag){
  106. numbers[i] = data;
  107. break;
  108. }
  109. }
  110. }
  111. //3、随机生成中奖的蓝球号码
  112. numbers[numbers.length-1] = r.nextInt(16) + 1;
  113. return numbers;
  114. }
  115. //打印数组的方法
  116. public static void printArray(int arr[]){
  117. System.out.print("[");
  118. for (int i = 0; i < arr.length; i++) {
  119. System.out.print(arr[i] + "\t");//\t代表空格的意思。
  120. }
  121. System.out.println("]");
  122. }

8、实现一个简单的英中学员状态转换器: 输入表1中学员状况英文单词的第一个字母(大小写均可), 根据输入来判断学员学习状态,并输出学员状态的中文形式。 用户可重复输入进行转换,输入n退出系统。运行效果如图1所示。

 使用GUI的JOptionPane方法:

大家可以看这位博主写的,链接如下:

JOptionPane总结_flying_coder的博客-CSDN博客_joptionpane最近在做swing程序中遇到使用消息提示框的,JOptionPane类其中封装了很多的方法。很方便的,于是就简单的整理了一下。1.1 showMessageDialog 显示一个带有OK按钮的模态对话框。下面是几个使用showMessageDialog的例子:Java代码  JOptionPane.showMessageDialog(null, "友情提示"https://blog.csdn.net/qwezhaohaihong/article/details/78668549

  1. public static void main(String[] args) {
  2. JOptionPane.showMessageDialog(null,"* * * * * *欢迎使用学员状态转换器* * * * * *");
  3. input();
  4. }
  5. //定义一个输入学员状态的方法
  6. public static void input(){
  7. String letter = JOptionPane.showInputDialog("请输入学员状态的英文单词:");
  8. //使用switch循环
  9. switch (letter){
  10. case "E":
  11. case"e":
  12. JOptionPane.showMessageDialog(null,"优");
  13. isBack();
  14. break;
  15. case "G":
  16. case "g":
  17. JOptionPane.showMessageDialog(null,"良");
  18. isBack();
  19. break;
  20. case "S":
  21. case "s":
  22. JOptionPane.showMessageDialog(null,"中");
  23. isBack();
  24. break;
  25. case "F":
  26. case "f":
  27. JOptionPane.showMessageDialog(null,"差");
  28. isBack();
  29. break;
  30. default:
  31. JOptionPane.showMessageDialog(null,"输入错误,无法转换");
  32. }
  33. }
  34. //定义一个您想继续吗(是否退出)的方法
  35. public static void isBack(){
  36. String letter = JOptionPane.showInputDialog("您想继续吗?(y(继续)/n(退出系统))");
  37. if (letter.equals("y")){
  38. input();
  39. }else if (letter.equals("n")){
  40. JOptionPane.showMessageDialog(null,"退出系统");
  41. }else{
  42. JOptionPane.showMessageDialog(null,"输入错误,请重新输入:");
  43. isBack();
  44. }
  45. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/434821
推荐阅读
相关标签
  

闽ICP备14008679号