gpt4 book ai didi

java - 可能的范围问题(也许)?

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:46 27 4
gpt4 key购买 nike

所以我正在制作一个小型命令行彩票游戏(代码中的注释解释了一切),但是当我生成随机数时,我的代码并没有像我希望的那样将其缩短为三位数,除了游戏可以运行并且可以玩之外,除了偶尔有一个随机生成的数字超过一千并且没有缩短之外。任何想法(抱歉,如果它很难阅读,我还不知道很多 java 概念,所以我只能使用基本的逻辑运算符)

/* Dustin Shropshire 5.14.2016 

test program : LotteryGame ,
generate a random number and then separate them into their place values
and store them in variables allows user to take a guess at the value
allows user to take a guess at the value and then take their input
and determine if all the numbers match in the exact order, or if they
match in any order, or if at least one of the numbers match */




import java.util.Scanner;

public class LotteryGame {
public static void main(String[] args){

Scanner input = new Scanner(System.in);

int lotteryDigitNumber1 = 0, lotteryDigitNumber2 = 0, lotteryDigitNumber3 = 0; // the lottery numbers place to hold its three digits
int userGuessInput = 0, userGuessDigit1 = 0, userGuessDigit2 = 0, userGuessDigit3 = 0; // users guess and a place to hold its three digits
int seperateLotteryNumber = 0, seperateUserNumber = 0; // used to seperate the number
int shortenVariable = 0; //used to shorten a randomaly generated variable if its over 1000;
int moneyCounter = 10000; //starting amount of money
int randomLotteryNumber = 0; //initialzing this out of the loop in the hopes that it puts everythin in scope


while(moneyCounter > 0){

randomLotteryNumber = (int)(Math.random() * 1000 + 100 ); // generates a random number between 0 and 1100 exlusing 1100

System.out.println("please enter a three digit number as your guess:");

userGuessInput = input.nextInt();

//this while loop is used to prevent someone from entering a number less than 100 and greater than 999
while((userGuessInput >= 1000) || (userGuessInput <= 99)){

System.out.println("sorry that is not three digit number please enter a three digit number:");

userGuessInput = input.nextInt(); }

System.out.println("the random lotttery number was " + " " + randomLotteryNumber);

// this if statment is used if a randomly generated number is over 1000 to truncate to a 3 digit number
if(randomLotteryNumber >= 1000){

shortenVariable = randomLotteryNumber / 10;

lotteryDigitNumber1 = shortenVariable / 100;
seperateLotteryNumber = shortenVariable % 100;
lotteryDigitNumber2 = seperateLotteryNumber / 10;
lotteryDigitNumber3 = seperateLotteryNumber % 10;
}

else if( randomLotteryNumber <= 999){

lotteryDigitNumber1 = randomLotteryNumber / 100;
seperateLotteryNumber = randomLotteryNumber % 100;
lotteryDigitNumber2 = seperateLotteryNumber / 10;
lotteryDigitNumber3 = seperateLotteryNumber % 10;}
//used to seperate lottery numbers digits into individual variables


userGuessDigit1 = userGuessInput / 100;
seperateUserNumber = userGuessInput % 100;
userGuessDigit2 = seperateUserNumber /10;
userGuessDigit3 = seperateUserNumber % 10;
//used to seperate lottery number digits into individual variables


if(userGuessInput == randomLotteryNumber ) {

moneyCounter = moneyCounter + 10000;

System.out.println("the lottery number was:" + " " + randomLotteryNumber + " " + "you guessed right you earn $10,000"
+ " " + "currentmoney:" + " " + moneyCounter);

//this if statment is only true when both the lottery number and the user guess is exactly matched
}
else if ((userGuessDigit1 == lotteryDigitNumber1 && userGuessDigit2 == lotteryDigitNumber3 && userGuessDigit3 == lotteryDigitNumber2
|| userGuessDigit1 == lotteryDigitNumber2 && userGuessDigit2 == lotteryDigitNumber1 && userGuessDigit3 == lotteryDigitNumber3
|| userGuessDigit1 == lotteryDigitNumber2 && userGuessDigit2 == lotteryDigitNumber3 && userGuessDigit3 == lotteryDigitNumber1
|| userGuessDigit1 == lotteryDigitNumber3 && userGuessDigit2 == lotteryDigitNumber2 && userGuessDigit3 == lotteryDigitNumber1
|| userGuessDigit1 == lotteryDigitNumber3 && userGuessDigit2 == lotteryDigitNumber1 && userGuessDigit3 == lotteryDigitNumber2)){
//this logic block is true when the lottery number and user guess have all the same numbers but in a different order

moneyCounter = moneyCounter + 3000;

System.out.println("the lottery number was:" + " " + randomLotteryNumber + " " + "you guessed all the numbers right just in the wrong order you earn $3,000"
+ " " + "currentmoney:" + " " + moneyCounter);



}
else if ( (userGuessDigit1 == lotteryDigitNumber1) || (userGuessDigit1 == lotteryDigitNumber2) || (userGuessDigit1 == lotteryDigitNumber3)
|| (userGuessDigit2 == lotteryDigitNumber1) || (userGuessDigit2 == lotteryDigitNumber2) || (userGuessDigit2 == lotteryDigitNumber3)
|| (userGuessDigit3 == lotteryDigitNumber1) || (userGuessDigit3 == lotteryDigitNumber2) || (userGuessDigit3 == lotteryDigitNumber3)){
//this logic block is only true when the user guesses one of the same numbers as the lottery number

moneyCounter = moneyCounter + 1000;

System.out.println("the lottery number was:" + " " + randomLotteryNumber + " " + "you guessed one number right you earn $1,000"
+ " " + "currentmoney:" + " " + moneyCounter);

}
else if( (userGuessDigit1 != lotteryDigitNumber1 && userGuessDigit2 != lotteryDigitNumber3 && userGuessDigit3 != lotteryDigitNumber2
|| userGuessDigit1 != lotteryDigitNumber2 && userGuessDigit2 != lotteryDigitNumber1 && userGuessDigit3 != lotteryDigitNumber3
|| userGuessDigit1 != lotteryDigitNumber2 && userGuessDigit2 != lotteryDigitNumber3 && userGuessDigit3 != lotteryDigitNumber1
|| userGuessDigit1 != lotteryDigitNumber3 && userGuessDigit2 != lotteryDigitNumber2 && userGuessDigit3 != lotteryDigitNumber1
|| userGuessDigit1 != lotteryDigitNumber3 && userGuessDigit2 != lotteryDigitNumber1 && userGuessDigit3 != lotteryDigitNumber2)){
//this logic block is used if none of the numbers in any order is matched

moneyCounter = moneyCounter - 1000;

System.out.println("oh sadly none of the numbers match you lose $1000" + " " + "current money:" + " " + moneyCounter);
}




}


System.out.println("your out of money thanks for playing");
}

}

最佳答案

这不是范围问题,而是错误使用 Math.random() 的问题。 Math random 返回 0(包含)和 1(不包含)之间的值,并且您似乎隐含地假设它的精度不超过一位数字。 Math.random() 很可能会返回一个像 0.913 这样的数字,乘以 1000 将得到 913,然后当您添加 100 时将变为 1013,从而得到一个四位数字。生成三位数整数的正确方法是执行以下操作:

Random rand = new Random(); // should be done only once when the program starts
int randomLotteryNumber = 100 + rand.nextInt(900);

关于java - 可能的范围问题(也许)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37248283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com