有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何一次将用户输入与多个变量进行比较?

我一直在尝试一个基本的程序,它复制了游戏《智囊团》。到目前为止,我已经能够得到4个数据点,4个用户输入作为一个整数,但是我在比较4个数据点和4个用户输入时遇到了一个问题。目标是有4个RNG(范围从1到9),用户一次猜4个数字。他得到的唯一提示是一个数字是正确的。到目前为止,我已经能够生成一个低效的代码,设置为比较4个变量,例如(a=rng1,b=rng2,c=rng3,d=rng4)和用户输入。如何有效地将用户输入与生成的所有RNG进行比较。在这个例子中,我希望能够比较s1和poop;poop2;poop3;还有便便。我不想再为此编写100行代码。提前谢谢。代码如下

import java.util.*;
public class RandomNumberGenerator{;
private static Scanner in;
public static void main(String[] args){
  Random r = new Random();
  float s;
  in = new Scanner(System.in);
  int poop = (r.nextInt(10-1)+1);
  int poop1 = (r.nextInt(10-1)+1);
  int poop2 = (r.nextInt(10-1)+1);
  int poop3 = (r.nextInt(10-1)+1);
for (int i = 0; i < 80; i++)
{
System.out.println("Enter a number from 1-9");
s = in.nextFloat();
float s1 = in.nextFloat();
float s2 = in.nextFloat();
float s3 = in.nextFloat();

if(poop == s && poop1 == s1 && poop2 == s2 && poop3 == s3) {
    System.out.println("You are correct HeHe XD");
    break;
    }
if(poop > s && poop1 == s1 && poop2 == s2 && poop3 == s3){
    System.out.println("You have 1 wrong");
}
if(poop < s && poop1 == s1 && poop2 == s2 && poop3 == s3){
    System.out.println("You have 1 wrong");
}
if(poop > s && poop1 == s1 && poop2 == s2 && poop3 == s3){
    System.out.println("You have 1 wrong");
}
if(poop == s && poop1 > s1 && poop2 == s2 && poop3 == s3){
    System.out.println("You have 1 wrong");
}
if(poop == s && poop1 < s1 && poop2 == s2 && poop3 == s3){
    System.out.println("You have 1 wrong");
}
if(poop == s && poop1 == s1 && poop2 > s2 && poop3 == s3){
    System.out.println("You have 1 wrong");
}
if(poop == s && poop1 == s1 && poop2 < s2 && poop3 == s3){
    System.out.println("You have 1 wrong");
}
if(poop == s && poop1 == s1 && poop2 == s2 && poop3 > s3){
    System.out.println("You have 1 wrong");
}
if(poop == s && poop1 == s1 && poop2 == s2 && poop3 < s3){
    System.out.println("You have 1 wrong");
}
if(poop != s && poop1 != s1 && poop2 == s2 && poop3 == s3){
    System.out.println("You have 2 wrong");
}
if(poop != s && poop1 == s1 && poop2 != s2 && poop3 == s3){
    System.out.println("You have 2 wrong");
}
if(poop != s && poop1 == s1 && poop2 == s2 && poop3 != s3){
    System.out.println("You have 2 wrong");
}
if(poop == s && poop1 != s1 && poop2 != s2 && poop3 == s3){
    System.out.println("You have 2 wrong");
}
if(poop == s && poop1 != s1 && poop2 == s2 && poop3 != s3){
    System.out.println("You have 2 wrong");
}
if(poop == s && poop1 != s1 && poop2 != s2 && poop3 != s3){
    System.out.println("You have 3 wrong");
}
if(poop != s && poop1 == s1 && poop2 != s2 && poop3 != s3){
    System.out.println("You have 3 wrong");
}
if(poop != s && poop1 != s1 && poop2 == s2 && poop3 != s3){
    System.out.println("You have 3 wrong");
}
if(poop != s && poop1 != s1 && poop2 != s2 && poop3 == s3){
    System.out.println("You have 3 wrong");
}
if(poop != s && poop1 == s1 && poop2 != s2 && poop3 != s3){
    System.out.println("You have 3 wrong");
}
if(poop != s && poop1 != s1 && poop2 != s2 && poop3 != s3){
    System.out.println("You have 4 wrong");
}

 }

 }
}

共 (5) 个答案

  1. # 1 楼答案

    您可以使用两个ArrayList来存储4个数据点和用户输入。然后使用ArrayList.contains()进行比较。你不必写太多if condition。请参阅下面我的代码:

    public static void main(String[] args) {
          final int totalPoints = 4;
          Random r = new Random();
          in = new Scanner(System.in);
    
          ArrayList<Integer> poops = new ArrayList<Integer>(totalPoints);
          ArrayList<Integer> userinputs = new ArrayList<Integer>(totalPoints);
    
          for (int i=0; i<totalPoints; i++) {
              int poop = (r.nextInt(10-1)+1);
              System.out.println("Random datapoints: " + poop);
              poops.add(poop);
          }
    
    
          System.out.println("Enter a number from 1-9");
          for (int i=0; i<totalPoints; i++) {
              int s = in.nextInt();
              userinputs.add(s);
          }
    
          int correct = 0;
          for (int i=0; i<4; i++) {
              if (poops.contains(userinputs.get(i))) {
                  correct++;
              }
          }
    
          System.out.println("You have " + correct + "correct numbers");
    
    }
    
  2. # 2 楼答案

    将变量放在List中,然后可以使用contains检查元素是否在List中。 实际上,你会得到两个数字作为智囊团的反馈,有多少是正确的数字,有多少也在正确的位置。 由于mastermind中可能存在重复项,您可以对原始List进行copy,并从List中为每个正确的guess{}创建一个copy。否则,如果主控contains这个数字,猜测所有相同的number是正确的

    int size = 4;
    List<Integer> poops = new ArrayList<>();
    for(int i =0; i<size; i++){
        poops.add((r.nextInt(10-1)+1));
    }
    ...
    List<Integer> guesses= new ArrayList<>();
    for(int i =0; i<size; i++){
       guesses.add(in.nextInt());
    }
    int correctNumberCount = 0;
    List<Integer> poopsCopy = new ArrayList<>(poops);
    for(Integer guess: guesses){
        if(poopsCopy.contains(guess)){
            correctNumberCount ++;
            //For handling duplicates
            poopsCopy.remove(guess);
        }   
    } 
    int correctCount = 0;
    int counter = 0;
    for(Integer guess: guesses){
        if(guess == poops.get(counter)){
            correctCount++;
        }
        counter++; 
    }
    //Inform the user about correctNumberCount and correctCount 
    
  3. # 3 楼答案

    根据您的要求,您只需要获得每个输入组合的错误编号,而不需要输入错误的位置。所以,你没有必要列举所有的可能性

    您可以尝试下面的代码,size是一个数字,指示用户可以输入多少

    我用List来存储数字。把一系列数据保存在容器中是一个好习惯,这样你就可以用loop轻松地操作它们,loop是计算机最强大的功能之一

    import java.util.*;
    
    public class RandomNumberGenerator {
    
        private static Scanner in;
    
        private static List<Integer> expected = new ArrayList<Integer>();
        private static List<Integer> input = new ArrayList<Integer>();
    
        static private final int size = 4;
    
        static int correctNumber = 0;
    
        public static void check(List<Integer> expected, List<Integer> input) {
            for (int i = 0; i < size; i++) {
                if (expected.get(i) == input.get(i)) {
                    correctNumber++;
                }
            }
    
            if (correctNumber == size) {
                System.out.println("You are correct HeHe XD");
                return;
            } else {
                int wrongNumber = size - correctNumber;
                System.out.println("You have " + wrongNumber + " wrong");
                correctNumber = 0;
            }
        }
    
        public static void main(String[] args) {
            Random r = new Random();
            in = new Scanner(System.in);
    
            int count = size;
            while(count > 0){
                expected.add((r.nextInt(10 - 1) + 1));
                count--;
            }
    
            for (int i = 0; i < 80; i++) {
                System.out.println("Enter 4 numbers from 1-9");
                count = size;
                while(count > 0){
                    input.add(in.nextInt());
                    count--;
                }
                check(expected, input);
            }
        }
    }
    
  4. # 4 楼答案

    那么:

    import java.util.*;
    public class RandomNumberGenerator{;
    private static Scanner in;
    public static void main(String[] args){
      Random r = new Random();
      float s;
      in = new Scanner(System.in);
      int[] poops = new int[4];
      for(int i=0;i<poops.length;i++){
          poops[i]=r.nextInt(10-1)+1;
      }
    
    float[] s = new float[4];
    
    for (int i = 0; i < 80; i++){
        System.out.println("Enter a number from 1-9");
        int error =0;
        for(int j=0;j<poops.length;j++){
             if(poop[j] != in.nextFloat()){
                 error++;
             }
         }
         if(result == 0){
             System.out.println("You are correct HeHe XD");
             break;
         }else{
             System.out.println("You have "+error+" wrong");
         }
     }
    

    }

  5. # 5 楼答案

    你不能用名为p1,p2,p3

    请后退一步,阅读有关数组的概念

    然后创建两个数组(最好使用int;而不是float!)。 第一个数组携带程序想出的4个值;第二个数组由来自用户的4个值填充

    然后你迭代两个数组;来计算“用户”数组中有多少元素在“计算机”数组中给出。真的:你永远都不应该写包含那么多if/else语句的代码。这样的代码绝对不可能读取或维护。不要那样做。永远

    或者,您可以查看集合,它们是更复杂的数据结构。在本例中,可以使用整数对象的列表/数组列表。当你对这些东西感兴趣时;使用你最喜欢的搜索引擎并阅读相关内容