【发布时间】:2016-05-16 06:53:31
【问题描述】:
所以我正在制作一个小命令行彩票游戏(代码中的 cmets 解释了一切)但是当我生成随机数时,我的代码并没有像我希望的那样将其缩短为三位数,除了游戏可以运行并且可以玩之外每隔一段时间,随机生成的数字中就有一个超过一千,并且不会缩短。任何想法(对不起,如果它难以阅读,我还不知道很多 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");
}
}
【问题讨论】:
-
任何范围问题都容易出现
compile-time错误。它永远不会引发任何exception或倾向于infinite-loop@pawsome -
你怎么知道数字没有被缩短?如果它基于打印输出,那么您是否应该打印出
randomLotteryNumber?我的意思是,如果数字超过 1000,您只选择 3 位数字,但我没有看到您修改randomLotteryNumber,这意味着您正在打印生成的相同数字。
标签: java while-loop scope