2

Java は初めてで、ダイス プログラムでさらに別のエラーが発生しました。

このプログラムには、サイコロを振って 1 からユーザーが指定した数値までの値を返す roll()、サイコロの値を int として返す getFaceValue()、および toString() という 3 つのメソッドがあります。サイコロを文字列として返します。

私のプログラムに関する以前の質問への回答により、プログラムを機能させることができましたが、教授が望むように構成されていなかったため、プログラムを作り直す必要がありました。メソッド/変数のいずれも静的にすることはできず、プログラムの主要部分でのみユーザー入力を取得できることがわかりました。

コンパイルしようとすると、次のエラーが発生します。

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 として持っていました (私のプログラムではコメントアウトされていることがわかります) が、これにより静的参照エラーが発生しました。

あなたが提供できる助けに感謝します。

前の質問:ダイス プログラムのメソッドは 0 を返します

4

5 に答える 5

1

のインスタンス変数を作成sidesし、コンストラクターを介してダイに渡すことができます。private int sidesこれには、変数のコメントを解除する必要があります。

ダイコンストラクターの例:

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

このようなコンストラクターを使用すると、入力として読み取った辺の数を使用してDieをインスタンス化できます。

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

これで、ダイのsidesフィールドはユーザーが入力したものに設定され、ダイのメソッドはそれに応じてその値を使用します。

于 2012-09-26T20:43:24.417 に答える
0

発生している問題は、メソッドに対してsidesローカルであり、main()メソッドにまったく渡されないことroll()です。コンパイラがコンパイルしているとき、コンパイラは何を参照しているのかをroll()認識していないため、エラーが発生します。double y = (x * sides) + 1;sides

これを実現する方法は2つありますが、ユーザーから収集した入力をクラスに渡す方法を見つける必要がありますmain()Dieこれを行う1つの方法は、Dieクラスのコンストラクターです。

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

Die次に、を受け入れて、というメンバーフィールドでそれを追跡するコンストラクターを持つようにクラスを変更intます(メソッドとクラスの変数の名前は実際には同じである必要はありませんが、これは単なる便宜です) 。sidesmain()Die

public class Die {
    private int sides;

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

    public int roll() {
        ...
        double y = (x * this.sides) + 1;
于 2012-09-26T20:43:45.553 に答える
0

sidesのスコープ内で定義していませんpublic int roll() {

main内に変数を作成すると、スコープがmain内のみに狭まります。変数として渡すか(値で渡されます)、クラス変数(フィールド)にしない限り、mainの外側にアクセスすることはできません。

サイコロとして、あなたはそれを実際のクラスのフィールドにしたいのです。したがって、クラスのトップでサイドを定義します。

public class Die {
  int sides;

コンストラクターで割り当てます。

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

次に、を呼び出すrollと、sides変数が使用可能になります。

于 2012-09-26T20:40:21.627 に答える
0

あなたの変数の側面は未定義であり、そのような値で渡すことができます

public int roll(int sides) {
    .....
    double y = (x * sides) + 1;
    .....
}
于 2012-09-26T20:40:41.860 に答える
0

rollメソッドの引数としてsidesを渡します。

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());
    }

    }
于 2012-09-26T20:40:51.080 に答える