(作业)骰子计划,找不到符号

时间:2012-09-26 20:38:57

标签: java

我是java的新手,我在骰子程序中遇到了另一个错误。

在这个程序中我有三个方法,roll()来滚动die并返回一个介于1和用户指定的数字之间的值,getFaceValue(),以将int掷骰的值作为int和toString返回(),将模具卷作为字符串返回。

我之前关于我的程序的问题的答案使我能够使该程序正常工作,但它没有像教授想要的那样构建,所以我不得不重做它。我现在知道我的方法/变量都不是静态的,我只能在程序的主要部分接受用户输入。

当我尝试编译时,出现以下错误:

Die.java:12: error: cannot find symbol
double y = (x * sides) + 1;

symbol: variable sides
location: class Die

我的代码如下:

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

public class Die {
    //private int sides;
    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() {
        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) {
        int sides;
        System.out.println("How many sides will the die have?");
        Scanner keyboard = new Scanner(System.in);
        sides = keyboard.nextInt();

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

最初,我将变量边作为私有int(你可以在我的程序中看到它被注释掉),但这会产生静态引用错误。

感谢您提供的任何帮助。

上一个问题是:Methods in Dice Program return 0

5 个答案:

答案 0 :(得分:1)

您可以为sides创建一个实例变量,并通过构造函数将其传递给die。这需要您取消注释private int sides变量。

示例Die构造函数:

public Die(int sides) {
    this.sides = sides;
}

使用这样的构造函数,您可以使用您读取的边数来实例化Die。

sides = keyboard.nextInt();
Die die = new Die(sides);

现在,你的骰子sides字段被设置为用户输入的内容,而骰子的方法也相应地使用该值。

答案 1 :(得分:0)

您尚未在sides

的范围内定义public int roll() {

在main中创建变量会将其范围缩小到仅在main内 - 除非将其作为变量传递(将通过值传递)或使其成为类变量(字段),否则不能访问其外部

作为骰子,你想让它成为实际课堂上的一个领域。因此,在课程顶部定义边:

public class Die {
  int sides;

并在构造函数中指定它:

public Die(int s) {
  sides = s;
}

然后当你致电roll时,你的双边变量将可用。

答案 2 :(得分:0)

你的变量边是未定义的 你可以通过像这样的值传递

public int roll(int sides) {
    .....
    double y = (x * sides) + 1;
    .....
}

答案 3 :(得分:0)

sides 作为参数传递给roll方法。

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

public class Die {
//private int sides;  
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(int sides) {
    double x = Math.random();
    double y = (x * sides) + 1;
    z = (int)y;
    return z;
}


public static void main(String [] args) {
        int sides;
        System.out.println("How many sides will the die have?");
        Scanner keyboard = new Scanner(System.in);
        sides = keyboard.nextInt();

        System.out.println(" ");
        Die die = new Die();
        System.out.println("Roll: " + die.roll(sides)); // pass it as an argument to roll
        System.out.println("Face: " + die.getFaceValue());
        System.out.println("String: " + die.toString());
    }

    }

答案 4 :(得分:0)

您遇到的问题是sidesmain()方法的本地方法,并且不会以任何方式传递给roll()方法。当编译器正在编译roll()时,它会看到double y = (x * sides) + 1;并且不知道sides引用了什么 - 因此错误。

有两种方法可以实现此目的,但您应该找到一种方法将您从main()用户收集的输入传递到Die课程。一种方法是在Die类的构造函数中:

public static void main(String [] args) {
    int sides = keyboard.nextInt();
    ...
    Die die = new Die(sides);

然后,您将Die类更改为具有接受int的构造函数,并在名为sides成员字段中跟踪它(尽管main()方法和Die类中的变量名称实际上不需要相同,这只是一种便利。

public class Die {
    private int sides;

    public Die(int sides) {
        this.sides = sides;
    }

    public int roll() {
        ...
        double y = (x * this.sides) + 1;