2017-07-01 11 views
-4

私はこれを理解しようとするのに9時間を費やしましたが、これはうまくいきません。 main()メソッドでのインスタンスを作成すると、「シンボルが見つかりません」というエラーが返されます。コンストラクタに配列を渡す?

public class ship { 

    private String thisArray [] = {"I", "hate", "you"}; 

    // my constructor: 
    public ship (String [] thisArray) { this.thisArray = thisArray }; 

    public String toString() { String out; return out = thisArray; } 
} 

APPLICATION:事前に助けを

class shipdemo 
{ 
    public static void main (String [] args) {  
     ship = new ship(thisArray[2]); 
     ship.toString(); 
     // I am expecting this to print: "YOU" but instead it gives me: 
     // error: cannot find symbol     
    } 
} 

おかげで、。 shipthisArrayとして

+1

コンストラクタは配列を必要とします。 'thisArray [2]'は配列の一つの要素、すなわち 'String'です。あなたが 'String [] []'として宣言された別の 'thisArray'を持っていない限り。しかし、それは "シンボルが見つかりません"というエラーにつながりません。それを診断するには、プログラム全体を見る必要があります。 – ajb

+1

'thisArray [2]'は何と思いますか? – Li357

+1

また、 'thisArray'は' ship'クラスにあり、 'main'メソッドを含む' shipdemo'クラスにはありません。 'main'メソッドは変数' thisArray'を見ることができません。別のクラスにあるからです。 – Jesper

答えて

1

は、インスタンスが(すなわち、非static)を、あなたは、ローカルship変数を作成してみmain(すなわちstaticコンテキスト)でこれらを使用して、それはオブジェクト間で共有する必要がある場合などの静的thisArrayをマークすることはできませんvariblesです例えば:staticinstance変数の

private static String thisArray [] = {"I", "hate", "you"}; 

public static void main (String [] args) { 
    Ship ship = new ship(thisArray); 
    System.out.println(ship); 
} 

Here'sより。

+0

ご返信ありがとうございます。しかし、それはまだ記号が見つかりません、私はShip.thisArray [2]をmain()のコンストラクタで(そしてpublicに設定して)行うと "互換性のない型:StringをString []に変換できません" – Warren

+0

my配列は別のクラスにあります。それは問題ですか?私は "shipdemo"でthisArrayを作成するという意味で "ローカル船の変数を作成"しなければならないと言っていますか? – Warren

+0

配列が別のクラスにある場合、このクラスで使用するには 'public static'としてマークする必要があります。これが終わると、mainの 'ClassName.array'でアクセスできます。 'static'とマークできない場合は、' getter'メソッドで公開し、 'main'に別のクラスのインスタンスを作成する必要があります。 –

関連する問題