自定义骰子发生器

时间:2013-11-03 22:54:31

标签: java

好的,这是为了做作业。我不想要一个完整的答案,只是有人帮我推动我朝着正确的方向前进。我对Java很新,所以请放轻松:P好,所以我的教授正在让我们用OOP做一个骰子模拟程序。这只是整个问题的一部分,但这是我坚持的部分,所以如果你需要更多,我可以提供更多。但是说明说:制作一个滚动功能,模拟滚动每个模具,并返回总数 此功能应仅允许适当范围之间的值(即,如果每个模具仅有4个面,则应仅允许数字1-4)。 到目前为止,我对这个特定功能的了解是:

public double Roll()
{
    for(int i = 0; i < numDice; i++)
    {
    double total = Math.random()*numFaces + 1;
    }
    return total;

我不知道从哪里开始,我不知道该做什么。这是我的第一个编程课程,它超越了我的头脑:P就像我说的那样,如果我能指向正确的方向(使用虚拟对话,因为我仍然很难抓住这整个事情)那就是太棒了如果需要,我可以提供更多实际问题。

5 个答案:

答案 0 :(得分:2)

刚刚注意到你使用了double,用int或short替换double。请看以下教程。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

您的命名约定也不那么热门。读这个。

http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html

您不需要为每个脸部滚动,仅适用于每个骰子。这样做。

请注意,为此您也可以使用短裤。

public int roll() {
    return new Random().nextInt(6) + 1; // Returns number between 1 and 6
}

如果你想掷多个骰子,你可以这样做。

public int roll(int amount) {
    int total = 0;
    for(int i = 0; i < amount; i++) {
        total += new Random().nextInt(6) + 1;
    }
    return total;
}

答案 1 :(得分:1)

您在total循环中定义了for,这使得它在其外部不可见。而且,你在每次掷骰时都会覆盖它(=)而不是添加它(+ =)。

public double Roll()
{
    double total = 0;
    for(int i = 0; i < numDice; i++)
    {
        total += Math.random()*numFaces + 1;
    }
    return total;
}

我还建议遵循Java样式并重命名方法roll(方法以小写字母开头)。返回类型也让我感到奇怪,我可能会在类似的情况下使用int

答案 2 :(得分:1)

您可以创建一个名为Die的类来表示骰子。这符合OOP,因为'die'将是你的名词之一。现在想想Die可能具有的配置和行为。您可能希望Die具有可配置数量的面,但如果未指定,则默认为6。你也希望能够掷骰子。让我们看看到目前为止我们有什么。 实施留待读者阅读。

public class Die {

    public Die(){
        this(6);
    }

    public Die(int faces){
        //TODO: Write a constructor that takes number faces as an argument.
    }


    public int roll(){
        //TODO: Implement a roll for this die, considering the number of faces.
    }

}

好的,所以你有Die课程的开头。现在你可能会想,如果我可以将Dice组合在一起(如果你愿意的话,那就是一组骰子)会不会很酷。

public class Dice { 

    public Dice(Die... dice){
        //TODO: Implement constructor that takes an array of die objects.
    }

    public int roll(){
        //TODO: Roll all the dice, sum and return the result.
    }
}

接下来你可能会想,如果我可以将Dice和单个Die视为单一类型,那么男人就不会很甜蜜,我的意思是他们都可以卷起来。让我们创建一个名为Rollable的接口,指定滚动行为并让DiceDie实现它。

public interface Rollable {

    int roll();

}

然后返回并将类声明更改为。

public class Die implements Rollable 

public class Dice implements Rollable

现在需要解决问题的代码只需要担心Rollable而不是DieDice

答案 3 :(得分:0)

首先,您需要在for循环外声明总数。然后将其初始化为零。

然后,在for循环中。增加变量。

如果numFaces对于每个骰子应该是不同的,则需要在每次迭代时在for循环中获取它的值。

另外,您应该问自己:total变量我想要哪些可能的值?它应该是int还是double

答案 4 :(得分:0)

你需要在for循环之外定义总数,然后在循环中执行total + = ...