由于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);
}
}
答案 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);