0

我遇到的问题是非常基本的,但是这是我没有很好地掌握的问题。下面的程序使用递归来计算给定数量的骰子(由用户输入)总计为用户选择的数字的概率。

据我了解,DiceRoll 方法是 Diceroll 类的一部分。但是,当我尝试调用该方法时,出现错误。我认为这个程序的结构存在根本性的问题。有人可以帮我吗?

import java.util.Scanner;

public class DiceRoll {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double dice = 0;
        int r = 0;
        System.out.println("Please input the number of dice you wish to roll between 0 and 25: ");
        if (in.nextInt() < 0 || in.nextInt() > 25){
            System.out.println("invalid number of dice");
        } else {
            dice = in.nextInt();            
        }
        System.out.println("What number between 0 and 125 do you wish to roll?");
        if (in.nextInt() < 0 || in.nextInt() > 125) {
            System.out.println("invalid number, please choose between 0 and 125");
        } else {
            r = in.nextInt();
        }
    }

    double DiceRoll(double dice,int r) {
        if (dice==1 && (r<1 || r>6)){ 
            return 0;
        }
        if (dice==1 && (r>=1 && r<=6)){
            return (1.0/6);
        } else {
            return ((1.0/6)*DiceRoll(dice-1,r-1));
        }
    }
}

DiceRoll(dice, r)
4

3 回答 3

2

Java 中的所有代码都需要包含在方法或类中。你不能只是DiceRoll在课堂上打电话给浮动。

你真正想做的是像你现在一样从用户那里得到你的输入,然后在main方法调用DiceRoll中。

于 2013-04-23T22:53:29.490 回答
0

从主方法中删除 Diceroll 方法 ^_^
编辑:意识到 DiceRoll 方法没有在主方法中声明,但对它的调用放在主方法之外,将它移到里面,它应该可以工作

于 2013-04-23T22:49:53.937 回答
0

您需要删除该行

DiceRoll(dice, r)

此外,而不是使用

double DiceRoll(double dice,int r)

这将要求您实例化一个对象,使用

static double RollDice(double dice, int r)

作为一种静态方法,您不必为了使其工作而实例化该类型的对象。我还重命名了它,这样编译器就不会抱怨它看起来像一个无效的构造方法。使用静态方法,您只需调用

RollDice(dice, r)

在你的main方法结束时。

您的代码还有另一个问题 - 输入的行为不会像您想要的那样。我假设您希望它检查输入是否有效,然后再次询问是否无效。目前,它会说它无效然后什么也不做,但是当它有效时,它会立即期待另一个数字。将您的语句更改为如下所示:

System.out.println("Please input the number of dice you wish to roll between 0 and 25: ");
dice = in.nextInt();
while (dice < 0 || dice > 25){
    System.out.println("invalid number of dice");
    dice = in.nextInt();            
}

如果他们输入了一个无效的数字,这只会得到另一个数字,并且会循环直到他们给出一个有效的输入。

于 2013-04-23T23:00:01.973 回答