2016-08-13 2 views
-2

で発見されていない私は、文字列値に取るように設計された方法で作成したキューブのクラスを持っている:メソッドがスーパークラス

public Cube() 
{ 
    super(); 
} 

public Cube(int side) 
{ 
    this.side = side; 
} 

public Cube(String color) 
{ 
    this.color = color; 
} 

私は私のキューブクラスは

を拡張する別のサブクラスで作成されたsetterメソッドを持っています
public void setColor() 
{ 
    this.color = color; 
} 

私はsetColor(Cube.Cube(RED))を使用します。メソッドでは、コンパイルエラーとRuntimeExceptionが発生しています。 IDEは、CubeクラスでCube(String)シンボルを見つけることができないと言っています。

これは間違っていますか?

EDIT:私の最終目標は、ユーザーの入力に基づいてオブジェクトの色を設定することです

final static String RED = "red"; 

:として は私が使用していRED変数が初期化されます。これは学校プロジェクトのためですが、私はコード全体を投稿するのをためらっていました。私はこの方法で達成しようとしていることに干渉することを望んでいませんでした。これは初心者レベルのJavaクラスですので、ユーザー入力にswitch文を使用しています。ユーザーが「赤」を入力すると、このメソッドを呼び出して、キューブの色を赤に設定しようとしています。

static void addCubeColor() 
{ 
    String userColor; 
    System.out.println("Please enter the cube's color: "); 
    userColor = input.nextLine(); 

    switch(userColor.toLowerCase()) 
    { 
     case RED : setColor(Cube.Cube(RED)); 
        break; 

     case GREEN : setColor(Cube.Cube(GREEN)); 
        break; 

     case BLUE : setColor(Cube.Cube(BLUE)); 
        break; 

     default : setColor(Cube.Cube(RED)); 
        break; 
    } 
} 
+0

:たとえば :これが機能する

final Cube cube = new Cube(RED); // A new red cube cube.setColor(BLUE); // cube is now blue 

、あなたsetColor方法はString color引数を取る必要がありますコンパイルしていないのにコードを実行しようとしています。それをしないでください。次に、「Cube.Cube(RED)」という表現が期待していることは明確ではありません。単に「Cube.RED」を意味しましたか?最後に、スニペットではなく問題を示す[mcve]を提供すれば本当に役に立ちます。問題がサブクラスと何か関係があるかどうか、あるいはあなたがあなたの定数を適切に参照していないということが本当にあるかどうかはまったく明らかではありません。 –

+0

そのsetColorメソッドが奇妙に見えます。パラメータがないと確信していますか? –

答えて

1

あなたのsetColorメソッドは、あなたのカラー変数と同じ型のパラメータを取る必要があり、そのパラメータを使って色を設定します。あなたはしません。

例えば、ColorTypeの色変数のタイプである

public void setColor(ColorType color) { 
    this.color = color; 
} 

。たとえば、AWTまたはSwingの場合、ColorTypeはjava.awt.Colorになります。

+0

ありがとうございました。私はまったくそれをキャッチしませんでした! まだコンパイルエラーが発生しています。 NetBeansは、それでもシンボル(Cubeの場所にあるCube(String)メソッド)を見つけることができないと言っています。 – Brock

0

EDIT:パラメータとして「Cube.RED」もあるはずです。静的変数を[クラス名] [静的変数名]として渡します。この場合は "Cube.RED"です。

エラーは、setColor()に引数を渡そうとしているためですが、このメソッドはパラメータを受け取りません。変更するには

public void setColor(String color) 
{ 
    this.color = color; 
} 

修正する必要があります。

+0

これは、* one *エラーです。もう一つは 'Cube.Cube(RED)'を式として使用しています。私たちはコードの断片を見ただけで、他の問題があれば驚くことはありません。 –

+1

真。コードは複雑すぎるようです。 – Matt

+0

私は見ることができないコードには他のエラーがあるかもしれませんが、プログラムがビルドされ、私のIDEはこれ以外のエラーを表示しません。 – Brock

0

setColor(Cube.Cube(RED));というエラーは、コンパイラがCubeという静的関数を探していることを意味します。あなたが達成しようとしているもの

setColor(new Cube(RED));

0

public Cube(String color)は方法が、コンストラクタではありませんように見えます。それを呼び出すには、new Cube(color)を使用する必要がありますが、Cubeの新しいインスタンスが作成されることに注意してください。

既存のキューブの色を変更することを目的とする場合は、インスタンス上でsetColorメソッドを呼び出す必要があります。あなたがしている示唆例外*と*コンパイルエラーを取得している場合は

public void setColor(String otherColor) { 
    this.color = otherColor; 
} 
+0

それは私が心配していたものです。このコードを実行する前にキューブが既に作成されているので、すでに作成されたオブジェクトに色の値を割り当てようとしています。 – Brock

+0

'cube.setColor(あなたの新しい色はここにあります);'で色を変えることができるはずです。 'Cube'に' setColor'が存在せず、 'Cube'クラスを変更できない場合は、新しい色で新しい' Cube'を作成し、古いものの代わりに使用するべきです。 –

関連する問題