Java 如何防止用户重复输入同一号码

Java 如何防止用户重复输入同一号码,java,validation,Java,Validation,我正在用java创建一个程序,用户必须猜测计算机生成的一个随机数,用户总共有20次尝试来猜测这个数字,如果用户重复输入同一个数字,它将显示一条错误消息,并且没有计数作为他们的猜测之一,但不确定如何做到这一点。例如,如果用户第一次猜测为5,并且他们再次猜测为5,则应显示一条错误消息,说明“您已经输入了此数字 package guessinggame2; import java.util.Scanner; public class GuessingGame2 { static Scanner

我正在用java创建一个程序,用户必须猜测计算机生成的一个随机数,用户总共有20次尝试来猜测这个数字,如果用户重复输入同一个数字,它将显示一条错误消息,并且没有计数作为他们的猜测之一,但不确定如何做到这一点。例如,如果用户第一次猜测为5,并且他们再次猜测为5,则应显示一条错误消息,说明“您已经输入了此数字

package guessinggame2;
import java.util.Scanner;

public class GuessingGame2 {

  static Scanner kboard = new Scanner(System.in);

  public static void main(String args[]) // start of main 
  {
    System.out.println("Welcome to the guessing game, the computer will 
    generate a random number that you have to guess, good luck!");

    int secret_number = 0;
    int number_of_guesses = 0;
    Scanner input = new Scanner(System.in);
    int user_guess;
    int used_number = 0;

    secret_number = (int)(Math.random()*100) + 1;
    System.out.println("The computer has generated it's number");

    for(int i=0; i<20;i++) {

      System.out.println("Please make your guess");
      user_guess = kboard.nextInt();
      number_of_guesses++;

      if (user_guess == secret_number)
      {
        System.out.println("Your guess is correct it took you " + 
        number_of_guesses + " guesses");
      }

      else if  (user_guess < secret_number)
      {
        System.out.println("Your guess is too low try again");
      }

      else if (user_guess > secret_number)
      {
        System.out.println("Your guess is too high try again");
      }

      System.out.println (20 - number_of_guesses + " Guesses remaining"); 
    }
  }
}
包猜游戏2;
导入java.util.Scanner;
公开课猜谜游戏2{
静态扫描仪kboard=新的扫描仪(System.in);
公共静态void main(字符串args[])//main的开始
{
欢迎来到猜谜游戏,电脑会
生成一个你必须猜测的随机数,祝你好运!”;
int secret_number=0;
猜测的整数=0;
扫描仪输入=新扫描仪(System.in);
int用户猜;
整数=0;
秘密数=(int)(Math.random()*100)+1;
System.out.println(“计算机已生成其编号”);
for(int i=0;i机密号)
{
System.out.println(“您的猜测太高,请重试”);
}
System.out.println(20-猜测次数+剩余猜测次数);
}
}
}
要研究的关键字:

只需将用户的所有数字存储到这样一个数组中。然后,每次给出新数字时,您都可以迭代该数组。当您在该数组中找到该数字时,您可以打印错误消息

或者,您可以使用存储以前输入的数字。集合有一个很好的方法contains(),它可以避免数组的重复循环。但是集合类(如HashSet)有点高级,新手的通常做法是基于数组的解决方案。

要研究的关键字:

只需将用户的所有数字存储到这样一个数组中。然后,每次给出新数字时,您都可以迭代该数组。当您在该数组中找到该数字时,您可以打印错误消息


或者,您可以使用存储以前输入的数字这避免了数组的重复循环。但是集合类(如HashSet)有点高级,新手的通常做法是基于数组的解决方案。

您可以使用集合来跟踪用户提交的数字,例如

public class GuessingGame2 {

   static Scanner kboard = new Scanner(System.in);


   public static void main(String args[]) // start of main
   {

      System.out.println("Welcome to the guessing game, the computer will generate a random number that you have to guess, good luck!");

      int secret_number = 0;
      int number_of_guesses = 0;
      Scanner input = new Scanner(System.in);
      int user_guess;
      int used_number = 0;
      HashSet<Integer> user_inputs = new HashSet<>();

      secret_number = (int) (Math.random() * 100) + 1;
      System.out.println("The computer has generated it's number");

      for (int i = 0; i < 20; i++) {

         System.out.println("Please make your guess");
         user_guess = kboard.nextInt();
         if (!user_inputs.add(user_guess)) {
            System.out.println("Please provide another input");
            continue;
         }
         number_of_guesses++;

         if (user_guess == secret_number) {
            System.out.println("Your guess is correct it took you " +
                  number_of_guesses + " guesses");
         } else if (user_guess < secret_number) {
            System.out.println("Your guess is too low try again");
         } else if (user_guess > secret_number) {
            System.out.println("Your guess is too high try again");
         }

         System.out.println(20 - number_of_guesses + " Guesses remaining");


      }

   }

}
公共类猜测游戏2{
静态扫描仪kboard=新的扫描仪(System.in);
公共静态void main(字符串args[])//main的开始
{
System.out.println(“欢迎来到猜谜游戏,计算机将生成一个你必须猜的随机数,祝你好运!”);
int secret_number=0;
猜测的整数=0;
扫描仪输入=新扫描仪(System.in);
int用户猜;
整数=0;
HashSet user_inputs=新HashSet();
秘密数=(int)(Math.random()*100)+1;
System.out.println(“计算机已生成其编号”);
对于(int i=0;i<20;i++){
System.out.println(“请猜一猜”);
user_guess=kboard.nextInt();
如果(!user_inputs.add(user_guess)){
System.out.println(“请提供另一个输入”);
继续;
}
猜测次数++;
if(用户猜测==秘密号码){
System.out.println(“你的猜测是正确的,它花了你的时间”+
猜测次数+猜测次数);
}else if(用户猜测<秘密号码){
System.out.println(“您的猜测太低,请重试”);
}else if(用户猜测>密码){
System.out.println(“您的猜测太高,请重试”);
}
System.out.println(20-猜测次数+剩余猜测次数);
}
}
}

您可以使用集合来跟踪用户提交的数字,例如

public class GuessingGame2 {

   static Scanner kboard = new Scanner(System.in);


   public static void main(String args[]) // start of main
   {

      System.out.println("Welcome to the guessing game, the computer will generate a random number that you have to guess, good luck!");

      int secret_number = 0;
      int number_of_guesses = 0;
      Scanner input = new Scanner(System.in);
      int user_guess;
      int used_number = 0;
      HashSet<Integer> user_inputs = new HashSet<>();

      secret_number = (int) (Math.random() * 100) + 1;
      System.out.println("The computer has generated it's number");

      for (int i = 0; i < 20; i++) {

         System.out.println("Please make your guess");
         user_guess = kboard.nextInt();
         if (!user_inputs.add(user_guess)) {
            System.out.println("Please provide another input");
            continue;
         }
         number_of_guesses++;

         if (user_guess == secret_number) {
            System.out.println("Your guess is correct it took you " +
                  number_of_guesses + " guesses");
         } else if (user_guess < secret_number) {
            System.out.println("Your guess is too low try again");
         } else if (user_guess > secret_number) {
            System.out.println("Your guess is too high try again");
         }

         System.out.println(20 - number_of_guesses + " Guesses remaining");


      }

   }

}
公共类猜测游戏2{
静态扫描仪kboard=新的扫描仪(System.in);
公共静态void main(字符串args[])//main的开始
{
System.out.println(“欢迎来到猜谜游戏,计算机将生成一个你必须猜的随机数,祝你好运!”);
int secret_number=0;
猜测的整数=0;
扫描仪输入=新扫描仪(System.in);
int用户猜;
整数=0;
HashSet user_inputs=新HashSet();
秘密数=(int)(Math.random()*100)+1;
System.out.println(“计算机已生成其编号”);
对于(int i=0;i<20;i++){
System.out.println(“请猜一猜”);
user_guess=kboard.nextInt();
如果(!user_inputs.add(user_guess)){
System.out.println(“请提供另一个输入”);
继续;
}
猜测次数++;
if(用户猜测==秘密号码){
System.out.println(“你的猜测是正确的,它花了你的时间”+
猜测次数+猜测次数);
}else if(用户猜测<秘密号码){
System.out.println(“您的猜测太低,请重试”);
}else if(用户猜测>密码){
System.out.println(“您的猜测太高,请重试”);
}
System.out.println(20-猜测次数+剩余猜测次数);
}
}
}
  • 使用ArrayList创建数组并为其命名(例如“entered_numbers”)

  • 其他人建议使用
    hashset
    ,这对性能更有利。
    使用ArrayList的复杂性为O(n),而HashSet为O(1)。

    我选择了一种使用ArrayList更简单的方法,它不会对性能产生太大影响,因为您不会在ArrayList中存储太多数据。

    有关复杂性的更多信息,请参见此处:

  • 使用ArrayList创建数组并为其命名(例如“entered_numbers”)

  • 其他人建议使用
    hashset
    ,这是一个很好的选择
    if(entered_numbers.contains(user_guess)) {
        System.out.println("You have already entered this number");
        continue;
    } else {
        entered_numbers.add(user_guess);
        // Check if == secret number,
        // Check if < secret number,
        // Check if > secret number
    }