2017-03-14 17 views
0

私は数字を推測しなければならない簡単なプログラムを作成しようとしています。今はクラスの1つで、私は以下の形式の変数だけを宣言しています。Java識別子が宣言と初期化を期待しています

class player { 
    int num; //Declaration 
    num = (int) (Math.random() * 10); 
} 

これは識別子が必要であり、名前番号の付いた別のクラスを作成することを提案するエラーをスローします。

しかし、私は

class player { 
    int num = (int) (Math.random() * 10); //Declaration + Initialisation 
} 

を行う場合には、エラーなしで受け入れます。私はこれを見て、人々は方法の下で行われた初期化を得るように頼んだが、私は理由を理解できなかった。上記2つのアプローチの違いを教えてください。 Javaの

+0

別々の部品を行うことができ;'コードブロック内でなければならない、ではありませんクラスそのもの。 – QBrute

答えて

2

問題は、実際にはこの行です:

num = (int) (Math.random() * 10); 

これは単にクラススコープで行うことはできません。

あなたは宣言、あなたが方法/コンストラクタである場合にのみ、変数の初期化を分割することが許可されている

そうでない場合は、同じ行にあなたが表示されます

注意を行う必要があります/

class player { 
    int num; 
    { 
     num = (int) (Math.random() * 10); 
    } 
} 

のようなものについて聞いてください。ただし、コンストラクタやメソッド内でそれを行う方が良い/クリーンであることがわかります。

1

あなたは

private int num() { 
    return (int) (Math.random() * 10); 
} 
+0

ここで私の疑問を明確にするためにいつかお世話になりました。クイックヘルプに本当に感謝しています。 –

2

のようなものに変更することができ、Javaクラスは、属性とメソッドで構成されています。

したがって、メソッドの外部で属性を宣言することができ、javaは同じ行で初期化することさえできます。しかし、メソッドの外部で変数に値を代入することはできません。なぜなら、それは宣言ではなく操作であるからです。

同じ結果を達成するために、あなたは `numが=(int型)(Math.random()* 10)のようなコードの

class Player { 
    int num; 

    Player() {//This constructor method will be called when the class is instantiated 
     num = (int) (Math.random() * 10); 
    } 
} 
+0

OK ...ここの違いを説明してくれてありがとう...クイックヘルプに感謝します。 –

関連する問題