我正在编写一个程序,该程序需要生成一个三位数的随机数,然后扫描每个随机数,以便与猜谜游戏的输入进行比较。
我确实初始化了实例变量,只是没有把它们放在这里。我也有其他的方法,我认为这不会影响我现在遇到的问题。
老实说,我对编程和Java很陌生,所以它可能没有我想象的那么复杂。但我的问题是,当我创建一个名为randScan的扫描仪对象,并试图设置它来扫描我的secretNumber对象(这是随机生成的),我得到一个错误,说"没有找到合适的构造函数扫描仪(int)…",然后很多其他的错误在它下面(方式太多键入)。我只是不明白为什么它不会扫描随机数,因为它是一个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 ;
如果您只是想获得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);
处理secretNumber
String secretNumberString = new String(secretNumber);
作为字符串,然后你需要尝试扫描器#hasNextInt
根据Doc
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)