Java 骰子程序中的方法返回0

Java 骰子程序中的方法返回0,java,Java,我刚开始用Java编程,遇到了一个我似乎无法解决的问题 我的程序是要滚动(n)面模具,其中(n)由用户指定。然后,程序将滚动的结果打印为整数,滚动的面值打印为整数(这似乎与滚动的结果相同),滚动的结果打印为字符串。最后两种方法(面值和字符串)是与模辊不同的方法,但仍然是必需的 我的问题是,尽管代码可以编译,但getFaceValue()和toString()方法都返回零。我的代码是: import java.io.*; import java.util.*; public class Die

我刚开始用Java编程,遇到了一个我似乎无法解决的问题

我的程序是要滚动(n)面模具,其中(n)由用户指定。然后,程序将滚动的结果打印为整数,滚动的面值打印为整数(这似乎与滚动的结果相同),滚动的结果打印为字符串。最后两种方法(面值和字符串)是与模辊不同的方法,但仍然是必需的

我的问题是,尽管代码可以编译,但getFaceValue()和toString()方法都返回零。我的代码是:

import java.io.*;
import java.util.*;

public class Die {

  private int z;
  private String faceName;

//sets (and returns) the face value to a uniform random number between 1 and the number of faces.
public int roll() {
    Scanner keyboard = new Scanner(System.in);
    int sides = keyboard.nextInt();
    double x = Math.random();
    double y = (x * sides) + 1;
    z = (int)y;
    return z;
}

//returns the current face value of the die.
public int getFaceValue() {
    int face = z;
    return face;
}

//returns the string representation of the face value.
public String toString() {
    faceName = Integer.toString(z);
    return faceName;
}

public static void main(String [] args) {

    System.out.println("How many sides will the die have?");
    System.out.println(" ");
    System.out.println("Roll: " + new Die().roll());
    System.out.println("Face: " + new Die().getFaceValue());
    System.out.println("String: " + new Die().toString());
}
}

如果您能提供任何帮助,我将不胜感激。

我看到的第一个问题是,您正在创建三个模具类实例,这意味着生成的任何值都不会影响其他值

System.out.println("Roll: " + new Die().roll());
System.out.println("Face: " + new Die().getFaceValue());
System.out.println("String: " + new Die().toString());
应该读

Die die = new Die();
System.out.println("Roll: " + die.roll());
System.out.println("Face: " + die.getFaceValue());
System.out.println("String: " + die.toString());

我还将提示符
System.out.println(“模具有多少面?”)
移动到
roll
方法,因为这是您实际提出问题的地方,但这只是我,每次调用
new die()
,您都在创建一个独立于上一个模具的新模具。所以你要做一个模具,然后滚动它,然后再做一个模具,看看它的价值。由于您尚未滚动它,因此它仍然具有默认值
0
,因此这就是输出。你想要和你掷的骰子一样的骰子,然后看,就像这样:

public static void main(String [] args) {
    Die die = new Die();
    System.out.println("How many sides will the die have?");
    System.out.println(" ");
    System.out.println("Roll: " + die.roll());
    System.out.println("Face: " + die.getFaceValue());
    System.out.println("String: " + die.toString());
}

这将创建一个模具,然后滚动它并查看其值。它将为所有三个方法调用显示相同的值。

您不会为每个卷使用
new
die,是吗?:)实例化
Die
一次,重用到roll()和getFaceValue()。也许还值得一看种子值为模具中面数的
Random 35; nextInt()
。虽然问题已经解决,但我想指出一点:-“为什么在
getFaceValue()
中声明一个局部变量
face
,只是为了返回它”。。您只是创建了一个实例变量
z
副本
,这样做是没有用的。程序现在进行编译,getFaceValue()和toString()返回的值与roll()匹配。非常感谢你!