Java 猜数字程序错误?

Java 猜数字程序错误?,java,eclipse,Java,Eclipse,我正在尝试创建一个数字猜测程序,用户输入一个数字,程序会告诉您输入的数字是否过高、过低或正确。程序在0-100之间选择一个随机数。问题是当我开始测试程序时,当我选择1时,程序告诉我猜测太高。但这是错误的,因为该程序只能处理整数。如果用户输入的数字不等于随机数,则1必须太低。 谁能看看我的代码,看看有没有什么奇怪的地方 int guess; int guess2; int guess3; int guess4; int guess5; int random

我正在尝试创建一个数字猜测程序,用户输入一个数字,程序会告诉您输入的数字是否过高、过低或正确。程序在0-100之间选择一个随机数。问题是当我开始测试程序时,当我选择1时,程序告诉我猜测太高。但这是错误的,因为该程序只能处理整数。如果用户输入的数字不等于随机数,则1必须太低。 谁能看看我的代码,看看有没有什么奇怪的地方

int guess;
    int guess2;
    int guess3;
    int guess4;
    int guess5;
    int random = (int)Math.random() * 100;
    Scanner input = new Scanner(System.in);

    System.out.println("Try to guess a number between 0-100. You have five chances.");
    guess = input.nextInt();
    if(guess >= 100 || guess <= 0){
        System.out.println("Error, that is not a number between 0-100.");
    } else if(guess > random){
        System.out.println("The guess is too high.");
    } else if(guess < random){
        System.out.println("The guess is too low.");
    } else if(guess == random){
        System.out.println("YOU WIN");
    } else{
    }

    System.out.println("Second guess.");
    guess2 = input.nextInt();
    if(guess2 >= 100 || guess2 <= 0){
        System.out.println("Error, that is not a number between 0-100.");
    } else if(guess2 > random){
        System.out.println("The guess is too high.");
    } else if(guess2 < random){
        System.out.println("The guess is too low.");
    } else if(guess2 == random){
        System.out.println("YOU WIN");
    } else{
    }

    System.out.println("Third guess.");
    guess3 = input.nextInt();
    if(guess3 >= 100 || guess3 <= 0){
        System.out.println("Error, that is not a number between 0-100.");
    } else if(guess3 > random){
        System.out.println("The guess is too high.");
    } else if(guess3 < random){
        System.out.println("The guess is too low.");
    } else if(guess3 == random){
        System.out.println("YOU WIN");
    } else{
    }

    System.out.println("Fourth guess.");
    guess4 = input.nextInt();
    if(guess4 >= 100 || guess4 <= 0){
        System.out.println("Error, that is not a number between 0-100.");
    } else if(guess4 > random){
        System.out.println("The guess is too high.");
    } else if(guess4 < random){
        System.out.println("The guess is too low.");
    } else if(guess4 == random){
        System.out.println("YOU WIN");
    } else{
    }

    System.out.println("Last guess.");
    guess5 = input.nextInt();
    if(guess5 >= 100 || guess5 <= 0){
        System.out.println("Error, that is not a number between 0-100.");
    } else if(guess5 > random){
        System.out.println("The guess is too high.");
    } else if(guess5 < random){
        System.out.println("The guess is too low.");
    } else if(guess5 == random){
        System.out.println("YOU WIN");
    } else{
    }

更改int random=intMath.random*100;to int random=intMath.random*100

看起来不错,但您需要更改此行的演员阵容:

int random = (int)Math.random() * 100;
致:

当前您的随机数始终为0。为什么?因为您将Math.random强制转换为int,在Java中,这意味着小数点后的所有内容都将丢失。因此,0.85将变为0。0 * 100 = 0. 通过在Math.random之后添加括号,我们将其乘以100

另外,请注意,您的随机数可能是0,但永远不会是100。Math.random返回一个大于或等于0且小于1的数字。当您将其转换为int时,99.9999将变为99

如果您希望它真的是0-100,您会希望:

int random = (int)(Math.random() * 101);
此外,您可能希望在玩家获胜后终止游戏。因此,改变这一点:

System.out.println("YOU WIN");
为此:

System.out.println("YOU WIN");
return;  //end

最后,您的empty else子句永远不会被调用。您有超出范围、大于随机、小于随机和等于随机的条件。您可以安全地删除死代码。

您的代码有两个主要问题:

第一:

您未能立即强制转换随机变量,因此“随机值”的值始终为0

正确的样式是:

int random = (int)(Math.random() * 100);
第二:

你的if结构很糟糕:

例如:

if(guess >= 100 || guess <= 0){

说明:如果浇注数介于100和0之间,请执行以下操作。如果没有,请告诉用户他或她超出范围

您可以这样编写代码。可以很容易地使用for循环

    int guess;
    int random = (int) (Math.random() * 100);
    Scanner input = new Scanner(System.in);

    System.out.println("Try to guess a number between 0-100. You have five chances.");
    for (int i = 0; i < 5; i++) {
        System.out.println("Chance " + (i + 1));
        guess = input.nextInt();
        if (guess >= 100 || guess <= 0) {
            System.out.println("Error, that is not a number between 0-100.");
        } else if (guess > random) {
            System.out.println("The guess is too high.");
        } else if (guess < random) {
            System.out.println("The guess is too low.");
        } else if (guess == random) {
            System.out.println("YOU WIN");
            break;
        }
    }
    System.out.println(random);

那么,语句是否应该在开始时再次定义它,然后在语句结束时定义错误呢?我有点困惑为什么需要ifguess=0,因为程序员已经知道了这一点。是的,我更改了我的代码,你了解了Java中的循环概念吗?我了解了while和for循环的功能,但是老师从来没有真正说过如何组织格式。哦,好吧,如果你愿意的话,我可以为你添加一些信息,你可以改进你的代码吗?@noctune当你在其他部分遇到问题时,你是如何接受答案的?所以return在if语句中结束程序的?return标志着方法的结束。在本例中,您处于程序的main方法main中,因此它将结束程序。@nostromo您好吗?只是友好点你看到这条线了吗?如果猜2>=100 | |猜2看,我是老同学,所以我总是被教导所有函数/方法都有一个入口点和一个出口点。与其在每个赢的状态下敲打一个返回语句,不如将所有逻辑都包含在一个循环中,然后打破循环-但这只是在你的帖子中添加了一些解释,这可能有助于其他人快速理解。赢的时候打破循环,否则你会一直重复猜测。。。
if (guess <= 100 && guess >= 0) {
        if (guess > random) {
            System.out.println("The guess is too high.");
        } else if (guess < random) {
            System.out.println("The guess is too low.");
        } else if (guess == random) {
            System.out.println("YOU WIN");
        }
     } else {
        System.out.println("Error, that is not a number between 0-100.");
    }
    int guess;
    int random = (int) (Math.random() * 100);
    Scanner input = new Scanner(System.in);

    System.out.println("Try to guess a number between 0-100. You have five chances.");
    for (int i = 0; i < 5; i++) {
        System.out.println("Chance " + (i + 1));
        guess = input.nextInt();
        if (guess >= 100 || guess <= 0) {
            System.out.println("Error, that is not a number between 0-100.");
        } else if (guess > random) {
            System.out.println("The guess is too high.");
        } else if (guess < random) {
            System.out.println("The guess is too low.");
        } else if (guess == random) {
            System.out.println("YOU WIN");
            break;
        }
    }
    System.out.println(random);