2011-02-01 8 views
1
class B { 
    int x,y; 
    int z; 
    z=x*y; 

    void show() { 
    System.out.println(z); 
    } 
} 

class A { 
    public static void main(String as[]) { 
    B b=new B(); 
    b.show(); 
    } 
} 
+0

コードを正しくフォーマットし、完全なエラーメッセージ(行番号を含む)を印刷できますか? – PaulJWilliams

+3

質問がありますか? – Jon

+0

何らかの形で正しい(コンストラクタまたはイニシャライザブロック)を作成した場合は、その背後にあるロジックを重視する必要があります。なぜなら、xとyは初期化されていないからです。 –

答えて

14

クラス本体に文を使用することはできません(z=x*y;)。あなたは(少なくとも)は二つのオプション:

  • int z = x * y;
  • 使用初期化子ブロック

    { 
        z = x * y; 
    } 
    

これらはほぼ同じです。私は最初のオプション(クリーナー)を好むでしょうSee here

+0

またはコンストラクタ、またはフィールド初期化子(int z = x * y')。 –

+0

フィールドイニシャライザを示しました。コンストラクタもオプションですが、多くのコンストラクタが存在する可能性が高い場合は好ましくありません。 – Bozho

+0

イニシャライザブロック+1。 –

3

z=x*y;ここでそれを行うことはできません。コンストラクタ

私はあなたの問題は、これらの行にあることを考える
class B { 
    int x,y; 
    int z; 
    //z=x*y; //you cant do it here. where are you getting x and y value by the way??? 

    public B() 
    { 
    //x and y values should be set 'somehow' before this 
    z = x*y; 
    } 

    void show() { 
    System.out.println(z); 
    } 
} 
+0

Bozhoのソリューションを使用して...イニシャライザブロック... –

0

の内側にそれを置く:

int z; 
z=x*y; 

この最初の行は完全に罰金です - それはタイプintzと呼ばれるクラスのインスタンス変数を宣言します。しかし、この2行目はあなたの問題の原因です。 Javaでは、クラスメソッドまたは静的初期化子の外部にあるクラスにコードを入れることは不正です。この場合、文z = x * y;は正当なJavaコードですが、メソッドの内部にある必要があります。

これを修正するには、このコードをコンストラクタなどの方法に移動します。

0
z=x*y; 

記載されていない方法本体です。あなたはそれをすることはできません。それをコンストラクタまたは別のメソッドに移動します。

クラス本体とメソッド本体の内部には、フィールド、メソッド、および内部クラス宣言のみを記述できます。

関連する問題