Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可能的范围问题(可能)?_Java_While Loop_Scope_Java 8 - Fatal编程技术网

Java 可能的范围问题(可能)?

Java 可能的范围问题(可能)?,java,while-loop,scope,java-8,Java,While Loop,Scope,Java 8,因此,我正在制作一个小小的命令行彩票游戏(代码中的注释解释一切),但是当我生成随机数时,我的代码并没有像我希望的那样将其缩短为三位数,除了游戏可以运行并且可以玩之外,偶尔随机生成的数字中有一个超过1000,并且没有缩短。任何想法(抱歉,如果很难阅读,我还不知道很多java概念,所以我只能使用基本的逻辑运算符) /*达斯汀什罗普郡5.14.2016 测试程序:彩票游戏, 生成一个随机数,然后将其分隔为位置值 并将它们存储在变量中,允许用户猜测值 允许用户猜测值,然后进行输入 并确定是否所有数字都按

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

/*达斯汀什罗普郡5.14.2016
测试程序:彩票游戏,
生成一个随机数,然后将其分隔为位置值
并将它们存储在变量中,允许用户猜测值
允许用户猜测值,然后进行输入
并确定是否所有数字都按精确顺序匹配,或者
按任意顺序匹配,或者至少有一个数字匹配*/
导入java.util.Scanner;
公共类彩票游戏{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
int lotteryDigitNumber1=0,lotteryDigitNumber2=0,lotteryDigitNumber3=0;//彩票号码放置在保留其三位数字的位置
int usergustinginput=0,usergustingdigit1=0,usergustingdigit2=0,usergustingdigit3=0;//用户猜测并放置其三位数字的位置
int separateLotteryNumber=0,separateUserNumber=0;//用于分隔数字
int shortenVariable=0;//用于在随机生成的变量超过1000时缩短该变量;
int moneyCounter=10000;//起始金额
int randomLotteryNumber=0;//在循环外初始化它,希望它将所有内容都放在范围内
while(moneyCounter>0){
randomLotteryNumber=(int)(Math.random()*1000+100);//生成0到1100之间的随机数,不包括1100
System.out.println(“请输入一个三位数作为您的猜测:”);
userGuessInput=input.nextInt();
//此while循环用于防止某人输入小于100且大于999的数字
而((userGuessInput>=1000)| |(userGuessInput=1000){
shortenVariable=randomLotteryNumber/10;
lotteryDigitNumber1=短变量/100;
SeparateLotteryNumber=短变量%100;
lotteryDigitNumber2=单独的LotteryNumber/10;
lotteryDigitNumber3=单独的LotteryNumber%10;
}

否则,如果(randomLotteryNumber这不是范围问题,这是一个错误使用
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);

这不是范围问题,而是错误地使用
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);
Math.Random()
将返回一个从
0.0
0.99…

将其与1000相乘可能会得到一个类似999的数字,+100给出一个四位数的数字

这里有一个稍微复杂的解决方案

randomLotteryNumber = (randomLotteryNumber = (int)(Math.random() * 1000)) > 99 ? 
                                              randomLotteryNumber : 
                                              randomLotteryNumber + 100;

另一种简单的方法是使用Java流

Random r = new Random();
randomLotteryNumber = r.ints(100, 1000).findFirst().getAsInt();
这将返回一个从100(含)到1000(不含)的随机整数。

Math.random()
将返回一个从
0.0
0.99…

将其与1000相乘可能会得到一个类似999的数字,+100给出一个四位数的数字

这里有一个稍微复杂的解决方案

randomLotteryNumber = (randomLotteryNumber = (int)(Math.random() * 1000)) > 99 ? 
                                              randomLotteryNumber : 
                                              randomLotteryNumber + 100;

另一种简单的方法是使用Java流

Random r = new Random();
randomLotteryNumber = r.ints(100, 1000).findFirst().getAsInt();

这将返回一个从100(含)到1000(不含)的随机整数。

我相信您的问题在于您的打印输出。您打印的是
randomLotteryNumber
,而不是从生成的数字中选择的3位数字。由于您从未修改该数字,因此始终打印您生成的数字

代码中的一个示例:

System.out.println("the lottery number was:" + " " + randomLotteryNumber + " "  + "you guessed one number right you earn $1,000" 
                                    + " " + "currentmoney:" + " " + moneyCounter);
您可能应该打印(
toString()
部分仅用于确保没有进行算术运算,并且可能会被其他内容替换):


我相信您的问题在于打印输出。您打印的是
randomLotteryNumber
,而不是从生成的数字中选择的3位数字。由于您从不修改该数字,因此您总是打印生成的数字

代码中的一个示例:

System.out.println("the lottery number was:" + " " + randomLotteryNumber + " "  + "you guessed one number right you earn $1,000" 
                                    + " " + "currentmoney:" + " " + moneyCounter);
您可能应该打印(
toString()
部分仅用于确保没有进行算术运算,并且可能会被其他内容替换):


得到一个答案,我打印了错误的值,还有一个逻辑问题,如果一个大于1000的数字中有0

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(); } 



    // 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; 

    //may delete this logic later
    if(lotteryDigitNumber2 == 0){
        lotteryDigitNumber3 = seperateLotteryNumber;
    }


    }

    else if( randomLotteryNumber <= 999){  

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

        System.out.println("the random number is" + " " + shortenVariable);

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


    if(userGuessInput == shortenVariable ) { 

            moneyCounter = moneyCounter + 10000;

            System.out.println("the lottery number was:" + " " + shortenVariable + " "  + "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:" + " " + shortenVariable + " "  + "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:" + " " + shortenVariable + " "  + "you dident guess all the numbers but got some 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");
        }

    }
import java.util.Scanner;
公共类彩票游戏{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
int lotteryDigitNumber1=0,lotteryDigitNumber2=0,lotteryDigitNumber3=0;//彩票号码放置在保留其三位数字的位置
int usergustinginput=0,usergustingdigit1=0,usergustingdigit2=0,usergustingdigit3=0;//用户猜测并放置其三位数字的位置
int separateLotteryNumber=0,separateU