当前位置:   article > 正文

Java基础经典10道题

Java基础经典10道题

目录

for循环的嵌套

题目一: 求101到200之间的素数的个数,并打印

代码分析:

注意点:

题目二:开发验证码

代码分析:

题目三:数组元素的复制

代码分析:

题目四:评委打分

健壮版代码:

代码分析:看源码

注意点:

题目五:数字加密

优化版代码:

代码分析:

题目六:数字解密

代码分析:

题目七:抢红包

优化版代码:

代码分析:

难点:

解释:

题目八:双色球彩票系统

运行结果:

代码分析:

题目九:


for循环的嵌套

题目一: 求101到200之间的素数的个数,并打印

代码:

  1. package com.mohuanan.exercise;
  2. public class ExerciseTest01 {
  3. public static void main(String[] args) {
  4. int count = 0;
  5. for (int i = 101; i <= 200; i++) {
  6. boolean flag = true;
  7. for(int j = 2;j < i/2; j++){
  8. if(i % j == 0){
  9. flag = false;
  10. break;
  11. }
  12. }
  13. if(flag){
  14. count++;
  15. System.out.println(i+"是素数");
  16. }
  17. }
  18. System.out.println("一共"+count+"个素数");
  19. }
  20. }

代码分析:

这里使用2个for循环,加上if条件判断标志flag是否为true,

注意点:

1.count应该放在if(flag)的里面,当flag为true是,这个数字就是素数

2.第二个for的j变量从2开始

题目二:开发验证码

代码:

  1. package com.mohuanan.exercise;
  2. import java.util.Random;
  3. public class ExerciseTest02 {
  4. public static void main(String[] args) {
  5. //因为有52个字母(大小写)
  6. char[] chs = new char[52];
  7. for (int i = 0; i < chs.length; i++) {
  8. if (i <= 25) {
  9. //根据ASCII码
  10. //录入大写字母
  11. chs[i] = (char) (65 + i);//强制转化
  12. } else {
  13. //录入小写字母
  14. chs[i] = (char) (97 - 26 + i);
  15. }
  16. }
  17. String result = "";
  18. //创建一个Random的对象
  19. Random r = new Random();
  20. for(int i = 0;i<4;i++){
  21. //
  22. int randomIndex = r.nextInt(52);
  23. result = result + chs[randomIndex];
  24. }
  25. int number = r.nextInt(10);
  26. result = result + number;
  27. System.out.println(result);
  28. }
  29. }

代码分析:

1.定义了一个52的char类型的字符串,并用for循环根据ASCII码来给数组的元素赋值(大小写字母),创建了一个Random类,并使用nextInt()方法,进行四次循环,用来随机(大小为数组的长度)出来四个字母,赋值给String类型的变量result,之后再使用Random类中的nextInt()方法产生0到9的随机数,赋值给result

题目三:数组元素的复制

代码:

  1. package com.mohuanan.exercise;
  2. public class ExerciseTest03 {
  3. public static void main(String[] args) {
  4. int[] arr = {1,2,3,4,5,6};
  5. int[] newArr = new int[arr.length];
  6. for (int i = 0; i < arr.length; i++) {
  7. newArr[i] = arr[i];
  8. }
  9. //遍历输出
  10. for (int i = 0; i < arr.length; i++) {
  11. System.out.print(newArr[i]+" ");
  12. }
  13. //换行
  14. System.out.println();
  15. }
  16. }

代码分析:

这个太简单了,可以自己看上面的代码,这里不再分析

题目四:评委打分

代码:

  1. package com.mohuanan.exercise;
  2. import java.util.Scanner;
  3. public class ExerciseTest04 {
  4. public static void main(String[] args) {
  5. int sum = 0;
  6. int[] arr = new int[6];
  7. Scanner s = new Scanner(System.in);
  8. for (int i = 0; i < arr.length; i++) {
  9. System.out.println("请输入第" + (i + 1) + "个评委的分数");
  10. arr[i] = s.nextInt();
  11. sum += arr[i];
  12. }
  13. int max = arr[0];
  14. int min = arr[0];
  15. for (int i = 1; i < arr.length; i++) {
  16. if (max < arr[i]) {
  17. max = arr[i];
  18. }
  19. if (min > arr[i]) {
  20. min = arr[i];
  21. }
  22. }
  23. float score = 0F;
  24. score = (float) (sum - max - min) / (arr.length - 2);
  25. System.out.println(score);
  26. }
  27. }

健壮版代码:

  1. package com.mohuanan.exercise;
  2. import java.util.Scanner;
  3. public class ExerciseTest04 {
  4. public static void main(String[] args) {
  5. int sum = 0;
  6. int[] arr = new int[6];
  7. Scanner s = new Scanner(System.in);
  8. for (int i = 0; i < arr.length; ) {
  9. System.out.println("请输入第" + (i + 1) + "个评委的分数");
  10. //判断 分数是否合法
  11. int scoreArr = s.nextInt();
  12. sum += arr[i];
  13. if (scoreArr >= 0 && scoreArr <= 100){
  14. arr[i] = scoreArr;
  15. sum += arr[i];
  16. i++;//注意i++放在这里
  17. }else{
  18. System.out.println("您之前输入的分数有误"+"请重新输入第" + (i + 1) + "个评委的分数");
  19. }
  20. }
  21. int max = arr[0];
  22. int min = arr[0];
  23. for (int i = 1; i < arr.length; i++) {
  24. if (max < arr[i]) {
  25. max = arr[i];
  26. }
  27. if (min > arr[i]) {
  28. min = arr[i];
  29. }
  30. }
  31. float score = 0F;
  32. score = (float) (sum - max - min) / (arr.length - 2);
  33. System.out.println(score);
  34. }
  35. }

代码分析:看源码

注意点:

1.score = (float) (sum - max - min) / (arr.length - 2);这里要加强制转化,如果不加,/运算符会截断数据,从而使结果错误

题目五:数字加密

代码:

  1. package com.mohuanan.exercise;
  2. import java.util.Scanner;
  3. public class ExerciseTest05 {
  4. public static void main(String[] args) {
  5. Scanner s = new Scanner(System.in);
  6. System.out.println("请输入您的密码");
  7. int code = s.nextInt();
  8. code = handle(code);
  9. System.out.println(code);
  10. }
  11. public static int handle(int code) {
  12. int result = 0;
  13. int flag = 1;
  14. while (code > 0) {
  15. int temp;
  16. temp = code % 10;
  17. temp = (temp + 5) % 10;
  18. result = result + temp * flag;
  19. //result = result * 10 + temp;// reversedNumber = reversedNumber * 10 + digit; // 将最后一位数字添加到反转数字的末尾
  20. code /= 10;
  21. flag *= 10;
  22. }
  23. result = reversalNum(result);
  24. return result;
  25. }
  26. //数字反转
  27. public static int reversalNum(int code) {
  28. int result =0;
  29. while (code > 0) {
  30. int temp;
  31. temp = code % 10;
  32. result = result * 10 + temp;
  33. code /= 10;
  34. }
  35. return result;
  36. }
  37. }

优化版代码:

  1. package com.mohuanan.exercise;
  2. public class ExerciseTest06 {
  3. public static void main(String[] args) {
  4. int number = 1983;
  5. //为后面的下面使用number的值
  6. int temp = number;
  7. int count = 0;
  8. //计算数字的长度
  9. while (number != 0) {
  10. count++;
  11. number /= 10;
  12. }
  13. //定义一个数组
  14. int[] arr = new int[count];
  15. //把数字上的每一位复制到数组中
  16. while (temp != 0) {
  17. arr[--count] = temp % 10;
  18. temp = temp / 10;
  19. }
  20. //每位数加上5 并对10求余
  21. for (int i = 0; i < arr.length; i++) {
  22. arr[i] = arr[i] + 5;
  23. arr[i] = arr[i] % 10;
  24. }
  25. //所有数字反转
  26. for (int i = 0;i<arr.length/2; i++) {//arr.length/2 是把它看成一半
  27. int t;
  28. t = arr[i];
  29. arr[i] = arr[arr.length-1-i];//-1是索引 -i是
  30. arr[arr.length-1-i] = t;
  31. }
  32. //拼接
  33. int newNumber = 0;
  34. for (int i = 0; i < arr.length; i++) {
  35. newNumber = newNumber*10 + arr[i];
  36. }
  37. //输出打印
  38. System.out.println(newNumber);
  39. }
  40. }

代码分析:

题目六:数字解密

代码:

  1. package com.mohuanan.exercise;
  2. public class ExerciseTest07 {
  3. public static void main(String[] args) {
  4. int[] arr = {8, 3, 4, 6};
  5. //反转
  6. for (int i = 0, j = arr.length - 1; i < j; i++, j--) {//注意这里的循环条件 是 i<j 相当于左右指针
  7. int temp;
  8. temp = arr[i];
  9. arr[i] = arr[j];
  10. arr[j] = temp;
  11. }
  12. //由于之前是加密 余10 +5 所以要判断 并-5
  13. for (int i = 0; i < arr.length; i++) {
  14. if (arr[i] >= 0 && arr[i] <= 4) {
  15. arr[i] = arr[i] + 10;
  16. }
  17. arr[i] = arr[i] - 5;
  18. }
  19. //拼接
  20. int number = 0;
  21. for (int i = 0; i < arr.length; i++) {
  22. number = number * 10 + arr[i];
  23. }
  24. //输出
  25. System.out.println(number);
  26. }
  27. }

代码分析:

1.反转数字使用两个指针,循环条件i<j,使用临时变量,作为两个数的交换

2.由于数字的范围只能是5到14(因为一个一位数子加上5的范围,0+5到9+5),所以判断当前数字为0到4时就加上10,

3.根据数组的长度来拼接number = number*10+arr[i]

题目七:抢红包

代码:

  1. package com.mohuanan.exercise;
  2. import java.util.Random;
  3. public class ExerciseTest08 {
  4. public static void main(String[] args) {
  5. //数组奖池
  6. int[] arr = {2, 588, 888, 1000, 10000};
  7. //定义新数组 用于存储抽奖的结果
  8. int[] newArr = new int[arr.length];
  9. Random r = new Random();
  10. for (int i = 0; i < arr.length; i++) {
  11. int index = r.nextInt(arr.length);
  12. int prize = arr[index];
  13. while(contains(newArr,prize)){
  14. index = r.nextInt(arr.length);
  15. prize = arr[index];
  16. }
  17. newArr[i] = prize;
  18. }
  19. //遍历输出
  20. for (int i = 0; i < newArr.length; i++) {
  21. System.out.println("第"+(i+1)+"个抽出的是"+newArr[i]);
  22. }
  23. }
  24. //用于判断奖池是否存在
  25. public static boolean contains(int[] arr, int prize) {
  26. for (int i = 0; i < arr.length; i++) {
  27. if (arr[i] == prize) {
  28. return true;
  29. }
  30. }
  31. return false;
  32. }
  33. }

优化版代码:

  1. package com.mohuanan.exercise;
  2. import java.util.Random;
  3. public class ExerciseTest09 {
  4. public static void main(String[] args) {
  5. int[] arr = {2, 588, 888, 1000, 10000};
  6. //打乱数组里的元素
  7. Random r = new Random();
  8. for (int i = 0; i < arr.length; i++) {
  9. //根据 i 和 随机索引 进行交换
  10. int temp;//临时变量
  11. int randomIndex = r.nextInt(arr.length);//注意这里要给一个范围 arr.length 因为是从0开始的 所以0 1 2 3 4
  12. temp = arr[i];
  13. arr[i] = arr[randomIndex];
  14. arr[randomIndex] = temp;
  15. }
  16. //遍历输出
  17. for (int i = 0; i < arr.length; i++) {
  18. System.out.println(arr[i]);
  19. }
  20. }
  21. }

代码分析:

1.使用Random对象中的nextInt()方法,打乱数组的元素,根据i索引于随机索引进行交换

2.相比于上面的代码,少了(假设到了最后的一个数字,要一直索引,直到arr数组里的元素不与索引的相同)

难点:

1.有些人可能会疑惑,为什么这样子可以打乱数组的元素,

解释:

交换两个数字,数组中的元素,没有改变,改变的只是数组的元素的位置,但是数组的元素还是原来的那几个,

题目八:双色球彩票系统

代码:

  1. package com.mohuanan.exercise;
  2. import java.util.Random;
  3. import java.util.Scanner;
  4. public class ExerciseTest010 {
  5. public static void main(String[] args) {
  6. //1.生成中奖号码
  7. int[] arr = createNumber();
  8. for (int i = 0; i < arr.length; i++) {
  9. System.out.print(arr[i]+" ");
  10. }
  11. System.out.println();
  12. //2.用户输入号码
  13. int[] peopleArr = peopleInputNumber();
  14. //3.计算获奖情况
  15. //中奖的个数
  16. int redCount = 0;
  17. int blueCount = 0;
  18. //计算中红色球的个数 要长度-1
  19. for (int i = 0; i < arr.length-1; i++) {
  20. for(int j = 0;j<peopleArr.length-1;j++){
  21. //找到就 红色球+1 并退出循环,避免没有必要的运算
  22. if(arr[i]==peopleArr[j]){
  23. redCount++;
  24. break;
  25. }
  26. }
  27. }
  28. //计算中蓝色球的个数
  29. if(arr[arr.length-1]==peopleArr[peopleArr.length-1]){//注意是下标 所以-1
  30. blueCount++;
  31. }
  32. //根据红蓝球的个数 判断获奖情况
  33. switch(redCount){
  34. case 6:
  35. if(blueCount==1){
  36. System.out.println("恭喜你获得1000万 但是这是虚拟的 不要沉迷于");
  37. }else if(blueCount == 0){
  38. System.out.println("恭喜你获得500万 但是这是虚拟的 不要沉迷于");
  39. }
  40. break;
  41. case 5:
  42. if(blueCount==1){
  43. System.out.println("恭喜你获得3000元 但是这是虚拟的 不要沉迷于");
  44. }else if(blueCount == 0){
  45. System.out.println("恭喜你获得200元 但是这是虚拟的 不要沉迷于");
  46. }
  47. break;
  48. case 4:
  49. if(blueCount==1){
  50. System.out.println("恭喜你获得3000元 但是这是虚拟的 不要沉迷于");
  51. }else if(blueCount == 0){
  52. System.out.println("恭喜你获得10元 但是这是虚拟的 不要沉迷于");
  53. }
  54. break;
  55. case 3:
  56. if(blueCount==1){
  57. System.out.println("恭喜你获得10元 但是这是虚拟的 不要沉迷于");
  58. }
  59. break;
  60. case 2:
  61. case 1:
  62. if(blueCount==1){
  63. System.out.println("恭喜你获得5元 但是这是虚拟的 不要沉迷于");
  64. }
  65. break;
  66. default :
  67. System.out.println("没中,再接再厉,下次再买,才怪,不要再买了");
  68. }
  69. }
  70. //用户输入号码
  71. public static int[] peopleInputNumber(){
  72. //动态定义一个数组
  73. int[] arr = new int[7];
  74. Scanner sc = new Scanner(System.in);
  75. //用户录入6个红球
  76. for (int i = 0; i < arr.length-1; ) {
  77. boolean flag = false;
  78. System.out.print("请输入您的第"+(i+1)+"个红球号码");
  79. int redNumber = sc.nextInt();
  80. // 如果录入的数字不存在就赋值 注意数字的范围(1-33)
  81. if((!judgeNumber(arr,redNumber)) && (redNumber>=1 && redNumber <=33)){
  82. arr[i] = redNumber;
  83. i++;//录入新的数字才 i++ 即录入下一个数字
  84. flag = true;
  85. }
  86. if(flag==false){
  87. System.out.print("您输入的号码出错");
  88. }
  89. }
  90. //用户录入蓝球
  91. System.out.print("请输入您的蓝球号码:");
  92. int blueNumber = sc.nextInt();
  93. // 注意数字的范围(1-16)
  94. if(blueNumber>=1 && blueNumber <=16){
  95. arr[arr.length-1] = blueNumber;
  96. }else{
  97. while(true){
  98. System.out.print("您的号码超出范围 请重新输入:");
  99. blueNumber = sc.nextInt();
  100. if(blueNumber>=1 && blueNumber <=16){
  101. arr[arr.length-1] = blueNumber;
  102. break;
  103. }
  104. }
  105. }
  106. return arr;
  107. }
  108. //生成中奖号码
  109. public static int[] createNumber() {
  110. //创建一个动态长度为7的数组
  111. int[] arr = new int[7];
  112. Random r = new Random();
  113. //红球号码
  114. for (int i = 0; i < arr.length - 1; ) {//因为6个红球 一个蓝 所以-1
  115. int redNumber = r.nextInt(33) + 1;//这里加1 使范围从 1到33
  116. //如果存在 就再 随机
  117. //如果不存在 就赋值 并 i++
  118. if (!judgeNumber(arr, redNumber)) {
  119. arr[i] = redNumber;
  120. i++;// 赋值后再i++ 注意i++放在这里 这是新的数字 才让 i++
  121. }
  122. }
  123. //蓝球号码
  124. int blueNumber = r.nextInt(16) + 1;
  125. arr[arr.length-1]= blueNumber;
  126. return arr;
  127. }
  128. //判断是否存在
  129. public static boolean judgeNumber(int[] arr, int redNumber) {
  130. for (int i = 0; i < arr.length; i++) {
  131. if (arr[i] == redNumber) {
  132. return true;
  133. }
  134. }
  135. return false;
  136. }
  137. }

运行结果:

代码分析:

1. 根据需求,解决问题,分为3个步骤,

        1.1 生成一个获奖的代码,方法: 使用Random对象,动态创建一个长度为7(6红1蓝)的数组,当随机产生的数字要在范围内(红:1-33 蓝:1-16),并判断当前的数字在数组中是否存在,如果不存在,就将当前数字赋值到数组里,并i++,使将6个红球都赋值到数组里,最后再将蓝球号码赋值到数组的最后一个元素

        1.2 用户录入他的号码,方法: 动态创建一个长度为7(6红1蓝)的数组,使用Scanner对象,将用户录入的数字赋值到数组里面,(当随机产生的数字要在范围内(红:1-33 蓝:1-16),并判断当前的数字在数组中是否存在,如果不存在,就将当前数字赋值到数组里)使用while(true)使代码的健壮性更好,当用户输入的数字正确时,break,跳出循环

        1.3 定义redCount,blueCount,使用两个for计算中奖的红蓝球的个数,再根据中奖的红蓝球的个数,使用switch和if的嵌套来得出用户中奖的情况

2. 为了使代码更加的"好",可以增加一些注释和提高代码执行的效率,为了便于以后的维护,变量名和方法名一定要用通俗易懂的命名规则(驼峰原则) ,

题目九:买飞机票

代码:

  1. package com.mohuanan.exercise;
  2. import java.util.Scanner;
  3. public class ExerciseDemo03 {
  4. public static void main(String[] args) {
  5. //创建一个Scanner对象
  6. Scanner sc = new Scanner(System.in);
  7. //原来票价
  8. System.out.println("请输入您的票价");
  9. int ticket = sc.nextInt();
  10. //月份
  11. System.out.println("请输入您的月份");
  12. int month = sc.nextInt();
  13. //舱位
  14. System.out.println("请输入您的舱位,0 头等舱 1经济舱");
  15. int seat = sc.nextInt();
  16. //旺季
  17. if(month >= 5 && month <= 10){
  18. //头等舱
  19. if(seat == 0){
  20. ticket = (int)(ticket * 0.9);//数据类型强制转化
  21. }else if(seat == 1){
  22. ticket = (int)(ticket * 0.85);
  23. }else{
  24. System.out.println("没有这个舱位");
  25. }
  26. //淡季
  27. }else if((month >= 1 && month <= 4) || month >= 11 && month <= 12){
  28. if(seat == 0){
  29. ticket = (int)(ticket * 0.7);//数据类型强制转化
  30. }else if(seat == 1){
  31. ticket = (int)(ticket * 0.65);
  32. }else{
  33. System.out.println("没有这个舱位");
  34. }
  35. }else{
  36. System.out.println("抱歉,您输入的月份不对");
  37. }
  38. System.out.println(ticket);
  39. }
  40. }

代码分析:

                使用了if条件的嵌套,逐步细化问题,

题目十:二维数组

代码:

  1. package com.mohuanan.exercise;
  2. public class ExerciseTest012 {
  3. public static void main(String[] args) {
  4. //静态定义一个二维数组
  5. int[][] yearArrArr = {
  6. {1, 2, 3},
  7. {4, 5, 6},
  8. {7, 8, 9},
  9. {10, 11, 12}
  10. };
  11. //计算一年的和
  12. int yearSum = 0;
  13. for (int i = 0; i < yearArrArr.length; i++) {
  14. //int[] quarteArr = yearArrArr[i];
  15. int sum = getSum(yearArrArr[i]);
  16. System.out.println("第" + (i + 1) + "个季度和为" + sum);
  17. yearSum = yearSum + sum;
  18. }
  19. System.out.println("一年的和为"+yearSum);
  20. }
  21. //求每一个季度的销售额
  22. public static int getSum(int[] arr) {
  23. int sum = 0;
  24. for (int i = 0; i < arr.length; i++) {
  25. sum = sum + arr[i];
  26. }
  27. return sum;
  28. }
  29. }

代码分析:

1.静态定义一个二维数组,使用getSum()方法求每一个季度的和,并返回给sum

2.使用一个for循环,求每一个季度的和,并定义一个yearSum的变量存储一年的和,每一次循环把每一个季度的和赋值给yearSum,并累加

目录

for循环的嵌套

题目一: 求101到200之间的素数的个数,并打印

代码分析:

注意点:

题目二:开发验证码

代码分析:

题目三:数组元素的复制

代码分析:

题目四:评委打分

健壮版代码:

代码分析:看源码

注意点:

题目五:数字加密

优化版代码:

代码分析:

题目六:数字解密

代码分析:

题目七:抢红包

优化版代码:

代码分析:

难点:

解释:

题目八:双色球彩票系统

运行结果:

代码分析:

题目九:买飞机票

代码分析:

题目十:二维数组

代码分析:


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

闽ICP备14008679号