2012-04-29 12 views
0

私が作っている小さなプログラムに問題があります。基本的に私は6つのクラスを持っています。 1つのメインクラス、メインクラスを「拡張」する4つのサブクラス、およびプログラムを実行するための別のクラス。プログラムを実行するためのクラスがこれまでにレイアウトされている:メソッドのコンパイラエラー

public class ClassToRunProgram { 

public void main(String[] args){ 

Class1 a = new Class1(0, "class1"); //I've created 1 main class (Class5) that 
Class2 b = new Class2(1, "class2"); //these 4 classes extend. 
Class3 c = new Class3(2, "class3"); 
Class4 d = new Class4(3, "class4"); 

int randomNum = (int) (Math.random() *3); 

Class5[] arrayForClasses = new Class5[]{a, b, c, d}; //since they're extending this 
                //class I want to make them into 
                //a single Array? 


    String numberQuestion = JOptionPane.showInputDialog(null, 
"What question do you want to ask? \n 
Enter a number: \n 
1. First Question? \n 
2. Second Question? \n 
3. Third Question?"); 

int question = Integer.parseInt(numberQuestion); //not sure if this part is 
               //actually relevant at all?? 
               //Think it might be since I want to 
               //use integers in my if statement below 


if(question == 1){ 
    JOptionPane.showMessageDialog(null, "Blah blah"+arrayForClasses.getReturnValue()+" blah"); 
} 

.getReturnValue()メソッドは、クラス(1-5)のすべての範囲内です。これが実際に何をしなければならないかわからない。しかし、私が問題を抱えているのは、コンパイルすると(たとえ終了していなくても) "symbol:method .getReturnValue()location:variable arrayForClasses type Class5 []"というメッセージで "CAN NOT FIND SYMBOL" 。私はこれでどこが間違っているのだろうと思っていますか?

ご迷惑をおかけして申し訳ありません。

ありがとうございます!

+0

'arrayForClasses'は配列です。 'getReturnValue()'メソッドはありません。 –

+0

arrayForClassesはClass5 []であり、配列であり、配列にはgetReturnValue()メソッドがありません。あなたは本当に5つのクラスは必要ありません。あなたは1つのクラス "質問"が必要です。あなたはそのクラスのインスタンスを4つ(または他の量)作成する必要があります。 – esej

+1

この 'arrayForClasses [0] .getReturnValue()'のような配列インデックスを使用して、 'getReturnValue()'メソッドを呼び出します。 – Lion

答えて

2

arrayForClassesは配列であり、配列にはのオブジェクトにのみメソッドを追加することはできません。配列自体ではなく、配列内のオブジェクトのメソッドを呼び出す必要があります。だから今

arrayForClasses[0].getReturnValue() 

のようなもの、私はあなたが何をしようとして、次のに苦労していたので、私は「のようなものを」と言うと、私は「getReturnValueを置くこの考え方について少し心配です() "メソッドをさまざまなクラスに適用する特別な理由はありません。

+0

私はそれを呼び出さないと心配していたので、私は "getReturnValue()"メソッドをすべてのクラスに入れました。私はそれらを取り出してメインクラスに残し、上記のように "arrayForClasses [0]"に変更しました。ありがとうございました! – car

1

arrayForClassesは配列です。それはのオブジェクトが含まれているクラスの一つではありませんので、あなたは、配列の要素にアクセスする必要がgetReturnValue()方法

を持っていません(Class5またはそのサブクラスの1つのオブジェクトであること)、およびその上getReturnValue()を呼び出す:

arrayForClasses[0].getReturnValue() 

インデックスは0から3まで行くことができます(合計4つの要素)ANあなたはどちらを使用することができます。ループ内ですべてにアクセスすることもできます:

for (Class5 elem : arrayForClasses) { // cycles through each element in order 
    elem.getReturnValue(); 
} 
+0

ありがとうございます。それはちょうど切り刻まれた別の問題を本当に助けました! – car