代码应该计算一个随机数,你必须猜测它才能得到正确的答案但是当我尝试测试时,答案总是1,为什么会这样。 这是代码
public class GuessGame
{
private int target;
private int max;
private int maxGuesses;
/**
Constructs a new game by randomly selecting a target number
between 1 and max_value. Also assigns the maximum number of
guesses by calling the calcGuesses method.
@param max_value the largest possible target number
*/
public GuessGame(int maxValue)
{
//this.max = maxValue* (int)Math.random() + 1;
this.target = (maxValue * (int)Math.random()) + 1;
}
/**
Checks if the provided guess is in the range between 1 and max_value.
@param guess the guess to check
@return returns true if the guess is in the appropriate range
*/
public boolean isValidGuess(int guess)
{
//implementation not shown
if( guess >= 1 && guess <= max)
{
return true;
}
else
{
return false;
}
}
/**
Checks if the provided guess matches the target number.
@param guess the guess to check
@return returns true if the guess matches the target, false otherwise
*/
public boolean isWinner(int guess)
{
//implementation not shown
if( guess == target)
{
return true;
}
else {
return false;
}
}
/**
Checks if the provided guess is too high or too low
Precondition: the guess is not equal to the target.
@param guess the guess to check
@return returns an appropriate message indicating too high or too low
*/
public String determineHighLow(int guess)
{
//implementation not shown
if( guess > target)
{
return "Too HIGH!";
}
else if(guess < target)
{
return "Too LOW!";
}
return "The number you guessed is: " + guess;
}
/**
Calculates the number of guesses to give the player based on the
max_value selected.
@return returns the number of guesses to give the player
*/
public int calcGuesses()
{
maxGuesses = 10 ;
return maxGuesses;
}
/**
Calculates the number of guesses remaining.
@param guesses the number of guesses the player has used so far
@return returns the number of guesses remaining
*/
public int guessesLeft (int guesses)
{
//implementation not shown
maxGuesses = maxGuesses - guesses;
return maxGuesses;
}
}
这是测试人员类
import java.util.Scanner;
public class GuessGameRunner
{
/*
* The GuessGameRunner class is the main class that works as follows.
* The main method prompts the user to enter a maximum value(re-prompting if the user enters a
* number less than 10 or any non-integer),
* then constructs a new GuessGame object with that valid entered value.
* The following is then repeated until the player wins or runs out of guesses:
* player is informed of number of guesses remaining and is prompted to make a guess
* (re-prompting if invalid); the guess is checked for winning—if not a winner,
* the player is told whether the guess is too high or low.
* After the repetition is complete, the appropriate winning or losing message is displayed.
* The winning message should include how many guesses the player took.
*/
public static void main(String[] args)
{
int target;
Scanner goal = new Scanner (System.in);
System.out.println("Guess my number");
target = goal.nextInt() ;
GuessGame targetGuess = new GuessGame(10 );
//targetGuess.GuessGame(target);
target = targetGuess.calcGuesses();
System.out.println(targetGuess.calcGuesses());
int bool = goal.nextInt();
while(targetGuess.isWinner(bool)== false && target > 0)
{
System.out.println( targetGuess.isValidGuess(bool));
System.out.println(targetGuess.isWinner(bool));
if (target != bool)
{
System.out.println("guesses left: " + targetGuess.guessesLeft(1));
System.out.println(targetGuess.determineHighLow(bool));
}
bool = goal.nextInt();
}
System.out.println( targetGuess.isValidGuess(bool));
System.out.println(targetGuess.determineHighLow(bool));
System.out.println(targetGuess.isWinner(bool));
}
}
再次math.random()当我乘以并加1它似乎没有给我任何随机数,答案总是一个,请帮忙!
答案 0 :(得分:3)
你这样做
(int) Math.random()
因为Math.random()方法返回0到1之间的double,所以你是 将该double缩减为int,结果始终为 0
尝试修改转换操作发生的转换,并记住对整数操作的整数返回整数。
target = (int) (maxValue * Math.random()) + 1;
答案 1 :(得分:1)
Math.random()
会返回0
和1
之间的数字。这意味着(int)Math.random()
始终为0
,这反过来又让this.target = (maxValue * (int)Math.random()) + 1;
总是评估为1
。为了解决这个问题,只需在计算之外进行转换:
this.target = (int)(maxValue * Math.random() + 1);
答案 2 :(得分:0)
这是你的问题:
Random
来自Javadoc for Math.random():
返回带有正号的double值,大于或等于0.0且小于1.0。
所以你在半开区间[0.0,1.0 [得到一个值]并将其转换为int。由于转换为int只是向下舍入,{{1}}的结果总是为0.乘以maxValue,它仍然是0.加一,现在{{1}}总是设置结果为1。
查看课程{{1}}并使用method nextInt(int n)
获取区间[0,n [中的随机整数[(注意n是独占的)。