用于计算随机数的代码仅生成 1



代码应该计算一个随机数,你必须猜测它才能做出正确的答案,但是当我尝试测试它时,答案总是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 时,它似乎没有给我任何随机数,答案总是一个,请帮忙!

你正在这样做

(int) Math.random()

由于 Math.random(( 方法返回 0 到 1 之间的双精度值,因此您是将该双精度截断为 int 导致始终为 0

尝试修改发生强制转换操作的强制转换,并记住对整数操作的整数返回整数。

target = (int) (maxValue * Math.random()) + 1;

Math.random()返回一个介于 01 之间的数字。这意味着(int)Math.random()始终0,这反过来又使this.target = (maxValue * (int)Math.random()) + 1;始终评估为1。为了解决这个问题,只需在计算之外进行强制转换:

this.target = (int)(maxValue * Math.random() + 1);

这是你的问题:

this.target = (maxValue * (int)Math.random()) + 1;

来自 Javadoc for Math.random((:

返回一个带有正号、大于或等于 0.0 且小于 1.0 的双精度值。

因此,您会在半开区间 [0.0, 1.0[ 中得到一个值,并将其转换为 int。由于转换为 int 只是向下舍入,因此(int)Math.random()的结果始终为 0。将其乘以最大值,它仍然是 0。加一,现在结果this.target始终设置为 1。

签出类Random并使用方法 nextInt(int n) 获取区间 [0, n[ 的随机整数(注意 n 是互斥的(。

最新更新