0

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

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

我不知道从这里去哪里,我不知道真正要做什么。这是我的第一堂编程课,它超出了我的想象:P 所以就像我说的,如果我能指出正确的方向(使用虚拟谈话,因为我仍然很难掌握这整件事)那会棒极了。如果需要,我可以提供更多实际问题。

4

5 回答 5

2

刚刚注意到您使用了 double ,将 double 替换为 int 或 short 。看看下面的教程。

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;
}
于 2013-11-03T23:00:55.693 回答
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在类似的情况下使用。

于 2013-11-03T23:00:14.363 回答
1

您可以创建一个名为Die代表骰子的类。这符合 OOP,因为“死”将是您的名词之一。Die现在想想 a可能有什么配置和行为。您可能希望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而不是DieorDice

于 2013-11-03T23:13:49.553 回答
0

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

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

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

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

于 2013-11-03T22:59:53.513 回答
0

您需要在 for 循环外定义 total ,然后在循环内执行 total+=...

于 2013-11-03T23:00:48.733 回答