首页 > 解决方案 > 尝试创建一个选择 7 位数字并在彩票上尝试的程序,有没有更简单的方法可以做到这一点?

问题描述

我想编写一个程序,该程序基本上可以采用 7 个“快速选择”随机生成的数字和 7 个中奖号码,并一遍又一遍地循环它,直到它命中并计算它在命中之前所做的循环次数。我想不出一种更简单的方法来检查每个号码是否与中奖号码匹配,而无需为每种情况花费一两个小时编写 if 语句。这是我的代码:

class chancesofLotterywin {
  
  public static void main(String[] args){
    
    //Quick Pick
    double qp1 = 1;
    double qp2 = 1;
    double qp3 = 1;
    double qp4 = 1;
    double qp5 = 1;
    double qp6 = 1;
    double qp7 = 1;
    
    //Winning Numbers
    double win1 = 1;
    double win2 = 1;
    double win3 = 1;
    double win4 = 1;
    double win5 = 1;
    double win6 = 1;
    double win7 = 1;
   
    for(int i = 0;;i++){
      
      qp1 = Math.floor((Math.random()*50)+1);
      qp2 = Math.floor((Math.random()*50)+1);
      qp3 = Math.floor((Math.random()*50)+1);
      qp4 = Math.floor((Math.random()*50)+1);
      qp5 = Math.floor((Math.random()*50)+1);
      qp6 = Math.floor((Math.random()*50)+1);
      qp7 = Math.floor((Math.random()*50)+1);
      
      win1 = Math.floor((Math.random()*50)+1);
      win2 = Math.floor((Math.random()*50)+1);
      win3 = Math.floor((Math.random()*50)+1);
      win4 = Math.floor((Math.random()*50)+1);
      win5 = Math.floor((Math.random()*50)+1);
      win6 = Math.floor((Math.random()*50)+1);
      win7 = Math.floor((Math.random()*50)+1);
      
      
      if (qp1 == win1){
        if (qp2 == win2){
          if (qp3 == win3){
            if (qp4 == win4){
              if (qp5 == win5){
                if (qp6 == win6){
                  if(qp7 == win7){
                    System.out.println(qp1 + " " + qp2 + " " + qp3 + " " + qp4 + " " + qp5 + " " + qp6 + " " + qp7);
                    System.out.println(win1 + " " + win2  + " " + win3 + " " + win4  + " " + win5 + " " + win6 + " " + win7 );
                    System.out.println(i);
                    break;
                  }else{}
                }else if(qp6 == win7){
                  if(qp7 == win6){
                  System.out.println(qp1 + " " + qp2 + " " + qp3 + " " + qp4 + " " + qp5 + " " + qp6 + " " + qp7);
                  System.out.println(win1 + " " + win2  + " " + win3 + " " + win4  + " " + win5 + " " + win6 + " " + win7 );
                  System.out.println(i);
                  break;
                }else{}
                }else{}
              }else if (qp5 == win6){
                if (qp6 == win5){
                
              }else if (qp5 == win7){
                
              }else{}
            }else if (qp4 == win5){
              
            }else if (qp4 == win6){
              
            }else if (qp4 == win7){
              
            }else{}
          }else if (qp3 == win4){
            
          }else if (qp3 == win5){
            
          }else if (qp3 == win6){
            
          }else if (qp3 == win7){
            
          }else{}
        }else if (qp2 == win3){
          
        }else if (qp2 == win4){
          
        }else if (qp2 == win5){
          
        }else if (qp2 == win6){
          
        }else if (qp2 == win7){
          
        }else{}
      }else if(qp1 == win2){
        
      }else if (qp1 == win3){
        
      }else if (qp1 == win4){
        
      }else if (qp1 == win5){
        
      }else if (qp1 == win6){
        
      }else if (qp1 == win7){
        
      }else{}
        /*if (((qp2 == win1) || (qp2 == win2) || (qp2 == win3) || (qp2 == win4) || (qp2 == win5) ||(qp2 == win6) || (qp2 == win7))){
          if(((qp3 == win1) || (qp3 == win2) || (qp3 == win3) || (qp3 == win4) || (qp3 == win5) ||(qp3 == win6) || (qp3 == win7))){
            if(((qp4 == win1) || (qp4 == win2) || (qp4 == win3) || (qp4 == win4) || (qp4 == win5) ||(qp4 == win6) || (qp4 == win7))){
              if(((qp5 == win1) || (qp5 == win2) || (qp5 == win3) || (qp5 == win4) || (qp5 == win5) ||(qp5 == win6) || (qp5 == win7))){
                if(((qp6 == win1) || (qp6 == win2) || (qp6 == win3 || (qp6 == win4) || (qp6 == win5) ||(qp6 == win6) || (qp6 == win7)))){
                  if(((qp7 == win1) || (qp7 == win2) || (qp7 == win3) || (qp7 == win4) || (qp7 == win5) ||(qp7 == win6) || (qp7 == win7))){
                    System.out.println("check 7");
                    System.out.println(qp1 + " " + qp2 + " " + qp3 + " " + qp4 + " " + qp5 + " " + qp6 + " " + qp7);
                    System.out.println(win1 + " " + win2  + " " + win3 + " " + win4  + " " + win5 + " " + win6 + " " + win7 );
                    System.out.println(i);
                    break;
                  }
                }
              }
            }
          }
        }*/
      }
    }
  }
}

很多都是不完整的,因为我不能被要求对每个场景都进行编码。注释掉的部分是我之前的解决方案,但它存在一个问题,即 1 个中奖号码等于多个快速选择号码。

有没有更简单的方法来做到这一点?另外请注意技术上的笨拙,我重新学习 Java 最多的是 do/while 循环。

标签: javaif-statement

解决方案


public class Main {
    private static final Random random = new Random();

    public static void main(String[] args) {
        final var actual = listWithRandomNumbers();
        for(int i = 0;;i++){
            final var guess = listWithRandomNumbers();
            //System.out.println(guess+" | "+actual);
            if(guess.equals(actual)){
                System.out.println(i);
                break;
            }
        }

    }

    private static Set<Integer> listWithRandomNumbers() {
        return Stream.generate(() -> random.nextInt(50) + 1)
                .distinct()
                .limit(7)
                .collect(Collectors.toSet());
    }
}

如果流吓到你

private static Set<Integer> listWithRandomNumbers() {
        final var set = new HashSet<Integer>(7);
        for (int i = 0; i < 7; i++) {
            while(true){
                final var randomNumber = Main.random.nextInt(50) + 1;
                if(!set.contains(randomNumber)){
                    set.add(randomNumber);
                    break;
                }
            }
        }
        return set;
    }

或者

private static Set<Integer> listWithRandomNumbers() {
        final var set = new HashSet<Integer>(7);
        while(true){
            final var randomNumber = random.nextInt(50) + 1;
            set.add(randomNumber);
            if(set.size() == 7){
                break;
            }
        }
        
        return set;
    }

推荐阅读