提问者:小点点

Java:找不到适合Scanner(int)的构造函数


我正在开发一个程序,该程序需要生成一个三位数的随机数,然后扫描每个数字以与猜谜游戏的输入进行比较。

我确实初始化了实例变量,只是没有放在这里。我也有其他方法,我不认为这会影响我现在的问题。

老实说,我对编程和Java很陌生,所以它可能比我想象的要复杂得多。但我的问题是,当我创建一个名为 randScan 的扫描仪对象并尝试将其设置为扫描我的 secretNumber 对象(随机生成的)时,我收到一个错误,说“找不到适合 Scanner(int)的构造函数...”然后是它下面的许多其他错误(太多了,无法输入)。我只是不明白为什么它不会扫描随机数,因为它是一个整数。

任何帮助都将不胜感激!:)

import java.util.Random;
import java.util.Scanner;
import javax.swing.JOptionPane;     

// Generates three random single digit ints.  The first cannot be zero
// and all three will be different. Called by public method play()
public String generateSecretNumber()
{

    do 
    {   
        secretNumber = (int)(generator.nextInt(888)+101) ;              
        // scan the random integer
        Scanner randScan = new Scanner(secretNumber) ;  //<- THIS IS THE PROBLEM!
        num1 = randScan.nextInt();                      // scan the first digit
        num2 = randScan.nextInt() ;                     // scan the second digit
        num3 = randScan.nextInt() ;                     // scan the third digit
    }   
    while ( num1 == 0 || num1 == num2 ||
         num2 == num3 || num1 == num3) ;   // re-generate if any digits are the same

    return number ; 

共3个答案

匿名用户

如果您只是想获取 secretNumber 的三位数字(作为整数值),您可以使用:

num1 = secretNumber / 100;
num2 = (secretNumber / 10) % 10;
num3 = secretNumber % 10;

在这里使用字符串不需要转换。另一方面,如果您不需要秘书号码本身,当然您只需要生成1到9之间的三个数字。最简单的方法是使用以下内容:

List<Integer> digits = new ArrayList<Integer>();
for (int i = 1; i <= 9; i++) {
    digits.add(i);
}
Collections.shuffle(digits, generator);

...然后使用列表中的前三个值:

num1 = digits.get(0);
num2 = digits.get(1);
num3 = digits.get(2);

匿名用户

您应该通过< br >处理< code>secretNumber

String secretNumberString = new String(secretNumber);

作为一个字符串,然后你需要尝试扫描器#hasNextInt

Returns true if the next token in this scanner's input can be 
interpreted as an int value in the default radix using the nextInt() method.
The scanner does not advance past any input.


所以我想它可能会解决您的问题
所以您的代码如下

secretNumber = (int)(generator.nextInt(888)+101) ;              
       String secretNumberString = new String(secretNumber);
       Scanner randScan = new Scanner(secretNumberString) ;  
        if(randScan.hasNextInt())
            num1 = randScan.nextInt();
           //Remaining code

匿名用户

扫描仪的可用构造函数:

Scanner(File source) 
Scanner(File source, String charsetName) 
Scanner(InputStream source) 
Scanner(InputStream source, String charsetName) 
Scanner(Readable source) 
Scanner(ReadableByteChannel source)
Scanner(ReadableByteChannel source, String charsetName)
Scanner(String source)

对于个位数,您可能应该传递一个带有 String.valueOf(yourInt) 的字符串