为什么这个Math.random方法不起作用?

时间:2016-12-25 12:20:10

标签: math random return

由于Java不允许在一个方法中返回两种类型,我认为最好的方法是使用get方法。

简单地说,我希望计算机生成两个随机数,如果它们不相同,我希望它能打印出它们的总和。如果它们是相同的,我希望它再次滚动并总结所有卷。直到这里,它没关系,但后来我想看到的不仅是总和,还有计算机在添加之前随机生成的数字。因此,它必须是几种返回类型。

但它反而打印了0次。

你能帮我解决这个问题吗?我想知道这个代码到底有什么问题,是否可以做得更整洁更干净?我知道Java喜欢很久......

谢谢。

class App {

    public static int monopolyRoll(int side) {

        double randomNumber = Math.random();

        randomNumber = randomNumber * side;

        randomNumber = randomNumber + 1;

        int randomInt = (int) randomNumber;

        return randomInt;

    }

    private int roll1 = monopolyRoll(6);
    private int roll2 = monopolyRoll(6);

    public int userRolls() {

        if (roll1 != roll2) {

            return roll1 + roll2;

        } else {

            int roll3 = monopolyRoll(6);
            int roll4 = monopolyRoll(6);

            return roll1 + roll2 + roll3 + roll4;
        }
    }

    private static int first;
    private static int second;
    private static int third;

    public App(int first, int second, int third) {
        App.first = roll1;
        App.second = roll2;
        App.third = userRolls();
    }

    public static int getFirst() {
        return first;
    }

    public static int getSecond() {
        return second;
    }

    public static int getThird() {
        return third;
    }

    public static void main(String[] args) {

        int first = getFirst();
        int second = getSecond();
        int third = getThird();

        System.out.println(first);
        System.out.println(second);
        System.out.println(third);

    }

}

1 个答案:

答案 0 :(得分:1)

Math.random()有效,但您实际上从未在应用程序中调用。这就是您的应用程序所做的事情:

int first = getFirst();
int second = getSecond();
int third = getThird();

System.out.println(first);
System.out.println(second);
System.out.println(third);

就是这样。除了那些getter方法中的单个return语句以及它们返回的声明但从未分配的整数(所以,零),其他代码都没有执行。

我怀疑这是因为您对static关键字的一些误解。通过在代码编译之前围绕static关键字,你所做的就是创建一些在语法上正确但不做任何事情的东西:)

作为一个学习练习,尝试将所有业务逻辑移出App类,只留下main()方法作为应用程序的入口点。并从您创建的新类中删除所有static个关键字。这应该使该类的使用更加清晰。

类似的东西:

class Roller {
    private int roll1;
    private int roll2;
    // other private variables

    private int monopolyRoll(int side) {
        // your code
    }

    // your other methods, also private and non-static

    public Roller(int first, int second, int third) {
        this.first = roll1;
        this.second = roll2;
        this.third = userRolls();
    }

    // and so on
}

这里的想法是默认情况下使基于实例(非静态)。默认情况下也会创建private,直到明确需要在类外部访问为止。目前,您的类需要公开公开的唯一内容是构造函数和getter。

然后在main()方法中,您需要创建一个类的实例才能使用它。像这样:

Roller roller = new Roller(1, 2, 3);

int first = roller.getFirst();
int second = roller.getSecond();
int third = roller.getThird();

System.out.println(first);
System.out.println(second);
System.out.println(third);