提问人:HermitIX 提问时间:5/31/2023 更新时间:5/31/2023 访问量:43
如何在对象中调用方法而不传递应该在对象中已经存在的变量?
How do I call a method in an object without passing a variable that should already be in the object?
问:
我正在尝试创建一个掷骰子程序来练习编写程序。我正在创建一个 Dice 对象。我希望能够创建一个骰子,并在创建它时说明边数。示例:骰子 d6 = new Dice(6)。之后,我希望能够打印出卷筒结果,而无需指定边数。在通话中。现在我有这个......System.out.println(d6.rollDie(6));。我希望能够只做System.out.println(d6.rollDie);或者 System.out.println(d6.rollDie());每次调用时都必须指定边数,这否定了在对象中具有边变量的意义。
这是我当前的 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;
}
}
答:
1赞
aled
5/31/2023
#1
使用构造函数中已配置的边。只需添加一个调用原始 rollDie() 的方法,并将其作为参数:
public int rollDie() {
return rollDie(sides);
}
-1赞
Reilas
5/31/2023
#2
方法不需要参数。
定义方法(Java 教程>学习 Java™ 语言>类和对象)。
您可以从类方法 rollDie 中访问您的类字段 sides。
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);
}
}
1赞
Elliott Frisch
5/31/2023
#3
它似乎不应该接受争论。至少对于实例方法不是。另外,我推荐 ThreadLocalRandom
。而且我很确定您当前的实现有一个偏离一的问题(您有一个七面骰子,而不是六面骰子)。把这些放在一起,可能看起来像rollDie
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);
}
}
评论
1赞
Elliott Frisch
5/31/2023
@Reilas 上限独占。所以这只是移动第二个.1 +
0赞
Reilas
5/31/2023
我不是说步骤。我只是说有一种方法可以处理下限和上限。请注意,到您的答案。
评论
sides
public int rollDie(int sides) {