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

时间:2017-05-18 06:17:44

标签: java

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

3 个答案:

答案 0 :(得分:3)

你这样做

(int) Math.random()

因为Math.random()方法返回0到1之间的double,所以你是 将该double缩减为int,结果始终为 0

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

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

答案 1 :(得分:1)

Math.random()会返回01之间的数字。这意味着(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是独占的)。