java 如何调用对象中的方法,而不传递应该已经在对象中的变量?

gcuhipw9  于 2023-06-04  发布在  Java
关注(0)|答案(3)|浏览(186)

我正在尝试创建一个掷骰子程序来练习编写程序。我正在创建一个Dice对象。我希望能够创建一个模具,并在创建时说明面数。示例Dice d 6 = new Dice(6)。之后,我希望能够打印出滚动结果,而无需指定边数。在电话里。现在我有这个... System.out.println(d6.rollDie(6));.我希望能够只执行System.out.println(d6.rollDie); System.out.println(d6.rollDie());每次调用时都必须指定边的数量,这就否定了在对象中使用sides变量的意义。
这是我目前的Java代码。

//Main.java
public class Main {

    public static void main(String[] args) {
    
        Dice d6 = new Dice(6);
        System.out.println(d6.sides);
        System.out.println(d6.rollDie(6));
    }

}

//Dice.java
import java.util.Random;

public class Dice {
    int sides;
    int roll;

    Dice(int sides) {
        this.sides = sides;
    }

    public int rollDie(int sides) {
        this.sides = sides;
        Random random = new Random();
        int result = random.nextInt(sides + 1) + 1;
    
        return result;
    }

}
deikduxw

deikduxw1#

使用已在构造函数中配置的边。只需要添加一个方法,调用原始的rollDie(),并将其作为参数:

public int rollDie() {
        return rollDie(sides);
}
o4hqfura

o4hqfura2#

rollDie似乎不应该接受参数。至少对于示例方法不是。另外,我推荐ThreadLocalRandom。我很确定你目前的实现有一个一个问题(你有一个七面的骰子,而不是一个六面的)。把这些放在一起,看起来就像

public class Dice {
    private int sides;

    public Dice(int sides) {
        this.sides = sides;
    }

    public static int rollDie(int sides) {
        return 1 + ThreadLocalRandom.current().nextInt(sides);
    }

    public int rollDie() {
        return 1 + ThreadLocalRandom.current().nextInt(this.sides);
    }
}
6ljaweal

6ljaweal3#

方法不需要参数。

您可以从类方法 rollDie 中访问类fieldsides

public int rollDie()

此外,您可以使用替代的 Random#nextInt 方法,该方法具有用于下限和上限的参数。

int result = random.nextInt(1, sides + 1);

此外,如果您将在每个示例中多次调用此方法,则可以增加本地 Random 声明的范围,并将其作为字段放置。
总的来说,你的类如下。

public class Dice {
    int sides;
    int roll;
    Random random = new Random();
    
    Dice(int sides) {
        this.sides = sides;
    }

    public int rollDie() {
        return random.nextInt(1, sides + 1);
    }
}

相关问题