実はかなり重要な問題です
if (gameType == 'p')
PigGame game = new PigGame();
else
SnakeGame game = new SnakeGame();
は、変数宣言はステートメントではないことを示す Java 文法のためだけにコンパイルされません。実際、この変数「ゲーム」を実際には必要とせず、単に if ステートメントでコンストラクターを実行したいコードを想像することができます。
if (gameType == 'p')
new PigGame();
else
new SnakeGame();
そしてこれはコンパイルされます
if (gameType == 'p'){
PigGame game = new PigGame();
}else{
SnakeGame game = new SnakeGame();
}
これもコンパイルされます
当然のことながら、どちらの場合も、ブラケットの外側の変数にはアクセスできませんが、それでも、ユーザーが次のようにコーディングすることを拒否しています
if (gameType == 'p')
PigGame game = new PigGame();
else
SnakeGame game = new SnakeGame();
少し恣意的であり、AFAIKは、ユーザーが自分が何をしているのかを「確実に」確認することを目的としています。一般に、変数のスコアは括弧で囲まれた宣言によって定義されるため、次のように書くと
{
Integer x=3;
System.out.println(x); //this works
}
System.out.println(x); //but this does not
ここでも同じことが当てはまりますGame
。if ステートメント内でオブジェクトを宣言することはできますが、game
変数によってその外部にアクセスすることはできません。しかし、それはあなたのコードに依存します.
public class Game{
public static Game lastCreatedGame;
public Game(){
lastCreatedGame=this;
}
}
次に、実行中
if (gameType == 'p')
new PigGame();
else
new SnakeGame();
Game.lastCreatedGame
フィールドごとにゲームにアクセスできます