2017-11-19 7 views
-2

変数が宣言されていてステートメントの外側で使用できない場合、変数はif-elseステートメント内に '含まれています。しかし、私はどのように外側の1つを宣言し、if-elseの中で文字列を変更するのですか?(Java) 'if-else'ステートメントで宣言された文字列を変数に解決できません

System.out.println("Is it day or night?"); 
String dayornight = scan.nextLine(); 

if(dayornight.equals("day")) { 
    String brightness = "bright"; 

} else if(dayornight.equals("night")) { 
    String brightness = "dark"; 

} 
System.out.println("Then it must be " + brightness + " outside."); 

は}

+0

これを行うだけです。それを外側に宣言し、内部でその値を変更します。答えは問題です。 –

+0

変数の* scope *は、その宣言を最も密接に囲む '{}'文字の間の領域です。 –

答えて

0

ローカル変数(メソッド内で宣言されたもの)のみブロック(中括弧)を囲む最も内側の内に存在します。したがって、異なる2つのbrightness変数が作成され、それぞれがif/elseブランチの1つにのみ存在します。

String brightness = ""; 
if (dayornight.equals("day")) { 
    brightness = "bright"; 
} else if(dayornight.equals("night")) { 
    brightness = "dark"; 
} 

はまた、あなたがelseを持っていないので、あなたはそれを宣言するときに変数を初期化する必要があることに注意してください:/他の場合には、事前に変数を宣言する必要があります。そうでない場合、ユーザが"day"または"night"以外の何かを入力した場合、変数は値を持たず、コンパイラはそれを許可しません。

1

あなたが外でそれを宣言する必要があります:

String brightness; 
if(dayornight.equals("day")) { 
    brightness = "bright"; 
} else if(dayornight.equals("night")) { 
    brightness = "dark"; 
} 

が、それはそれにコードを初期化せずに実行可能なコードパスがある場合ので(上記のコードのように)コンパイルされません良い方法です初期化しません。上記のコードでelse ifelseに変更するか、dayornightを処理するelseを追加すると、「日」または「夜」ではない問題が解決されます。もしブロックが外範囲外である内部で宣言

System.out.println("Is it day or night?"); 
String dayornight = scan.nextLine(); 
String brightness = ""; 
if(dayornight.equals("day")) { 
    brightness = "bright"; 

} else if(dayornight.equals("night")) { 
    brightness = "dark"; 

} 
System.out.println("Then it must be " + brightness + " outside."); 
0

これは、あなたが探しているものと考えられます。したがって、それらの変数をブロックの上に宣言する必要があります。

0

変数:

関連する問題