比较用户输入之间随机生成的数字

时间:2016-03-15 19:08:09

标签: java random

我是一名学生,我有一项任务,我不知道如何在这里完成提示,

"开发一个Java控制台应用程序,用于猜测一个秘密的五位数代码(从10000到99999的随机数)的简单游戏。当用户输入对代码的猜测时,程序输出两个值:猜测中位于正确位置的位数和这些位的总和。例如,如果密码是53840并且用户猜测83241,则数字3和4处于正确的位置。因此,程序应响应2(正确数字的数量)和7(正确数字的总和)。允许用户猜测,直到他/她正确。"

基本上我坚持的部分是如何找到哪些数字是正确的数字并将它们加在一起。到目前为止,这是我的代码。

Random rand = new Random();
    int secretNumber = rand.nextInt(99999 - 10000 + 1) + 10000;
    System.out.println(secretNumber);
    Scanner consoleScanner = new Scanner(System.in);
    int guess;
    do {
        System.out.print("Please enter a 5-digit code (your guess): ");
        guess = consoleScanner.nextInt();
        if (guess == secretNumber)
            System.out.println("****HOORAY!  You solved it.  You are so smart****");
        else if (guess > 99999 || guess < 10000)
            System.out.println("Guess must be a 5-digit code between 10000 and 99999.\n");
    } while (guess != secretNumber);

任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:1)

Integer.toString(int)返回整数的字符串表示形式。您可以逐个字符地比较从Integer.toString(secretNumber)Integer.toString(guess)返回的字符串,以确定哪些数字不同。

答案 1 :(得分:1)

你有一个号码。我打算把它叫做blarg。让我们说blarg是双倍的。 您还有一个名为输入的数字。

    String blargString = Double.toString(blarg);
    String inputString = Double.toString(input);
    ArrayList<Integer[]> indexNumberList = new ArrayList<Integer[]>();
    int n = 0;
    for (char c : blargString.toCharArray()) {
        n++;
        if (c == inputString.toCharArray()[n]) {
            Integer[] entry = new Integer[2];
            entry[0] = n;
            entry[1] = Character.getNumericValue(c);
            indexNumberList.add(entry);
        }
   }

现在您有一个Integer对列表。做你想做的事。对于每一对,entry [0]是数字中的位置,索引和条目[1]是值。

答案 2 :(得分:0)

你可以使用整数,使用模数和除法来得到你想要的数字。

53840%100000/10000 = 5
53840%10000/1000 = 3

循环并比较

答案 3 :(得分:0)

以下是我如何解决这个问题。我的解决方案很快但可能很天真。将用户输入的数字和生成的数字转换为字符串,然后转换为两个每个5字节的数组。扫描数组并一次比较两个相应的字节。如果两个相应的字节相等,让用户知道正确猜出了数字的位置。下面,我将向您展示如何获得所需的字节数组。

byte[] a =  Integer.toString(guess).getBytes();
byte[] b =  Integer.toString(secretNumber).getBytes();

答案 4 :(得分:0)

因此,您需要比较两个5位数字。 我建议你用循环来做这件事:

//Make copies so we can modify the value without changing
// the original ones.
int tempGuess = guess;
int tempSecret = secretNumber;

//Create variables for the output
int numCorrect = 0;
int sumCorrect = 0;
for(int i = 0; i < 5; i++) //for each of the digits
{
     //Get the last digit of each number and remove it from the number:
     int lastGuess = tempGuess%10;
     tempGuess/=10;
     int lastSecret = tempSecret%10;
     tempSecret/=10;

     //Compare both digits:
     if(lastGuess == lastSecret)
     {
         //Found a match: Increas number of found by one
         numCorrect++;
         //Add value of digit to sum
         sumCorrect += lastGuess;
     }
 }
 //numCorrect now contains the number of matching digits
 //sumCorrect now contains the sum of matchig digits

答案 5 :(得分:0)

解决方案可以解决如下:

  • 为巧合定义一个计数器,为那些
  • 的加法定义一个累加器
  • 在猜测中循环并按char比较char,如果任何给定char的输入与随机数匹配,如果是这样的话:
  • 将计数器加1,并将累加器的整数值添加到累加器。

实施例

final String s1 = Integer.toString(secretNumber);
final String s2 = Integer.toString(guess);
for (int i = 0; i < s1.length(); i++) {
    if (s1.charAt(i) == s2.charAt(i)) {
        counter++;
        acumm = Character.getNumericValue(s1.charAt(i));
    }
}
System.out.println("There is/are " + counter + " coincidences");
System.out.println("The addition of those is: " + acumm);