Java:没有为Scanner找到合适的构造函数(int)

时间:2013-04-03 05:48:36

标签: java object netbeans int java.util.scanner

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

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

老实说,我对编程和Java很陌生,所以它可能比我想象的复杂得多。但我的问题是,当我创建一个名为randScan的Scanner对象并尝试将其设置为扫描我的secretNumber对象(随机生成)时,我收到一条错误消息,指出“没有为Scanner找到合适的构造函数(int)......”然后在它下面还有很多其他错误(输出太多了)。我只是不明白为什么它不会扫描randomNumber,因为它是一个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 个答案:

答案 0 :(得分:4)

如果你只想获得secretNumber的三位数(作为整数值),你可以使用:

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

此处无需转换为使用字符串。另一方面,如果你自己不需要secretNumber,你肯定只需要在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);

答案 1 :(得分:1)

您应该按

处理secretNumber
String secretNumberString = new String(secretNumber);

作为字符串然后你需要尝试Scanner#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

答案 2 :(得分:0)

Available constructors for scanner

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)

的字符串