骰子程序中的方法返回0

时间:2012-09-26 04:32:01

标签: java

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

我非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分: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方法,看作是你实际问的问题,但那只是我

答案 1 :(得分: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());
}

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