Java注意点(六)

  1. 遇到需要通过判断数据在哪个区间来决定执行哪个业务,应该使用if分支结构实现;遇到需要通过判断数据匹配哪个值来决定执行哪个业务,应该使用switch分支结构实现。

  2. 如果一个方法里做的事比较多,一般把多个事拆成多个方法。

  3. 数组的拷贝事创建出一个与原数组一模一样的数组。

  4. 找素数案例:

    1. 信号位思想:

      public class Test7 {
          public static void main(String[] args) {
              // 目标:完成找素数。
              System.out.println("当前素数的个数是:" + search(101, 200));
          }
      
          public static int search(int start, int end){
              int count = 0;
              // start = 101   end = 200
              // 1、定义一个for循环找到101到200之间的每个数据
              for (int i = start; i <= end ; i++) {
                  // i = 101 102 103 ... 199 200
      
                  // 信号位思想
                  boolean flag = true; // 假设的意思:默认当前i记住的数据是素数。
                  // 2、判断当前i记住的这个数据是否是素数。
                  for (int j = 2; j <= i / 2; j++) {
                      if(i % j == 0){
                          // i当前记住的这个数据不是素数了
                          flag = false;
                          break;
                      }
                  }
                  // 3、根据判定的结果决定是否输出i当前记住的数据:是素数才输出展示。
                  if(flag){
                      System.out.println(i);
                      count++;
                  }
              }
              return count;
          }
      }
      
    2. 拦截:

      public class Test7_2 {
          public static void main(String[] args) {
              // 目标:完成找素数2。
              // 1、定义一个for循环,产生101-200之间的每个数据
              int count = 0;
      
              OUT: // 为外部循环指定标签
              for (int i = 101; i <= 200; i++) {
                  // i = 101 102 103 ... 199 200
      
                  // 2、拦截判断该数是否是素数
                  for (int j = 2; j <= i / 2; j++) {
                      if(i % j == 0) {
                          // 这个数肯定不是素数,不能打印
                          continue OUT; // 结束外部循环的当次执行!
                      }
                  }
      
                  count++;
                  System.out.println(i);
              }
              System.out.println("个数是:" + count);
          }
      }
      
    3. public class Test7_3 {
          public static void main(String[] args) {
              int count = 0;
              for (int i = 101; i <= 200; i++) {
                  // i = 101 102 103 ... 199 200
                  // i遍历到的当前数据是否事素数,是则输出,不是则不输出
                  if(check(i)){
                      System.out.println(i);
                      count++;
                  }
              }
              System.out.println("101到200之间有" + count +"个素数");
          }
      
          public static boolean check(int data) {
              for (int i = 2; i <= data / 2; i++) {
                  if (data % i == 0) {
                      return false;
                  }
              }
              return true;
          }
      }
      
  5. 模拟双色球:

    import java.util.Random;
    import java.util.Scanner;
    
    public class Test10 {
        public static void main(String[] args) {
            // 目标:完成双色球系统的开发。
            int[] userNumbers = userSelectNumbers();
            System.out.println("您投注的号码:");
            printArray(userNumbers);
    
            int[] luckNumbers = createLuckNumbers();
            System.out.println("中奖的号码:");
            printArray(luckNumbers);
    
            judge(userNumbers, luckNumbers);
    
        }
    
        /** 1、设计一个方法,用于让用户投注一组号码并返回(前6个是红球号码,最后1个是蓝球号码 )*/
        public static int[] userSelectNumbers(){
            // 2、创建一个整型数组,用于存储用户投注的7个号码(前6个是红球号码,最后1个是蓝球号码 )
            int[] numbers =  new int[7];
            // numbers = [0, 0, 0, 0, 0, 0, 0]
            //            0  1  2  3  4  5  6
    
            Scanner sc = new Scanner(System.in);
            // 3、遍历前6个位置,让用户依次投注6个红球号码,存入
            for (int i = 0; i < numbers.length - 1; i++) {
                // i = 0 1 2 3 4 5
    
                while (true) {
                    // 4、开始让用户为当前位置投注一个红球号码(1-33之间,不能重复)
                    System.out.println("请您输入第" + (i + 1) + "个红球号码(1-33之间,不能重复):");
                    int number = sc.nextInt();
    
                    // 5、先判断用户输入的红球号码是否在1-33之间
                    if(number < 1 || number > 33){
                        System.out.println("对不起,您输入的红球号码不在1-33之间,请确认!");
                    }else {
                        // 号码是在1-33之间了,接着还要继续判断这个号码是否重复,不重复才可以使用。
                        if(exist(numbers, number)){
                            // number当前这个红球号码是重复了。
                            System.out.println("对不起,您当前输入的红球号码前面选择过,重复了,请确认!");
                        }else {
                            // number记住的这个号码没有重复了,就可以使用了。
                            numbers[i] = number;
                            break; // 结束当次投注,结束了当前死循环。
                        }
                    }
                }
            }
    
            // 6、投注最后一个蓝球号码。
            while (true) {
                System.out.println("请您输入最后1个蓝球号码(1-16):");
                int number = sc.nextInt();
                if(number < 1 || number > 16){
                    System.out.println("对不起,您输入的蓝球号码范围不对!");
                }else {
                    numbers[6] = number;
                    break; // 蓝球号码录入成功,结束死循环
                }
            }
    
            return numbers;
        }
    
        private static boolean exist(int[] numbers, int number) {
            // 需求:判断number这个数字是否在numbers数组中存在。
            // numbers = [12, 25, 18, 0, 0, 0, 0]
            // number = 12
            for (int i = 0; i < numbers.length; i++) {
                if(numbers[i] == 0){
                    break;
                }
                if(numbers[i] == number){
                    return true;
                }
            }
            return false;
        }
    
        public static void printArray(int[] arr) {
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
            }
            System.out.println("]");
        }
    
        /** 2、设计一个方法:随机一组中奖号码出来(6个红球号码,1个蓝球号码 )*/
        public static int[] createLuckNumbers(){
            // 1、创建一个整型数组,用于存储这7个号码
            int[] numbers = new int[7];
    
            Random r  = new Random();
            // 2、遍历前6个位置处,依次随机一个红球号码存入(1-33 不重复)
            for (int i = 0; i < numbers.length - 1; i++) {
                // i = 0 1 2 3 4 5
    
                while (true) {
                    // 3、为当前这个位置随机一个红球号码出来存入。 1 - 33 ==&gt; -1 ===&gt; (0 , 32) + 1
                    int number = r.nextInt(33) + 1;
    
                    // 4、判断这个号码是否之前出现过(红球号码不能重复)。
                    if(!exist(numbers, number)){
                        // number不重复。
                        numbers[i] = number;
                        break; // 结束死循环,代表找到了当前这个位置的一个不重复的红球号码了。
                    }
                }
            }
    
            // 3、录入一个蓝球号码。 1-16
            numbers[6] = r.nextInt(16) + 1;
            return numbers;
        }
    
        /** 3、设计一个方法,用于判断用户的中奖情况 */
        public static void judge(int[] userNumbers,int[] luckNumbers){
            // userNumbers = [12, 14, 16, 18, 23, 26, 8]
            // luckNumbers = [16, 17, 18, 19, 26, 32, 8]
    
            // 2、分别定义2个变量用于记住红球命中了几个以及蓝球命中了几个
            int redCount = 0;
            int blueCount = 0;
    
            // 先判断红球命中的数量。
            // 遍历用户投注的号码的前6个红球
            for (int i = 0; i < userNumbers.length - 1; i++) {
                // userNumbers[i]
                // 开始遍历中奖号码的前6个红球号码,看用户当前选择的这个号码是否命中了
                for (int j = 0; j < luckNumbers.length - 1; j++) {
                    if(userNumbers[i] == luckNumbers[j]){
                        redCount++;
                        break;
                    }
                }
            }
    
            // 3、判断蓝球是否命中了
            blueCount = userNumbers[6] == luckNumbers[6] ? 1 : 0;
    
            System.out.println("您命中的红球数量是:" + redCount);
            System.out.println("您命中的蓝球数量是:" + blueCount);
    
            // 4、判断中奖详情,并输出结果
            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 < 3 && blueCount == 1){
                System.out.println("中了5元~");
            }else {
                System.out.println("感谢您对福利事业做出的巨大贡献~~~");
            }
    
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值