1

我刚刚开始使用 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());
}
}

我将不胜感激您能提供的任何帮助。

4

2 回答 2

3

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

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("How many sides will the die have?")移至roll方法,因为那是您实际提出问题的地方,但这只是我

于 2012-09-26T04:34:46.133 回答
0

每次调用 时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());
}

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

于 2012-09-26T04:37:33.143 回答