以下がやりたいことですか?
Like!
以下のコードのエラーを解決したいです。
エラーの内容として「aを変数に解決できません」と表示されます。
if文の意図は「もし0より1の方が大きかったら、aに1を代入する」です。
よって、「1」が出力されると思ったのですが、変数「a」が変数として不適切ということなのでしょうか?
package chapter7;
public class Multiple {
public static void main(String[] args) {
if (0 < 1) {
int a = 1;
}
System.out.println(a); ←エラー
}
}
以下がやりたいことですか?
変数が不適切、ではなく宣言の位置が不適切 ですね。
public static void main(String[] args) {
if (0 < 1) {
int a = 1;
}
System.out.println(a); //←エラー
// ここではifの内側で生まれた変数のことは見れないから怒られる
}
public static void main(String[] args) {
int a = 0;
// 変数aの宣言と、printlnの深さが一緒
if (a < 1) {
a = 1;
// aを書き換える
}
System.out.println(a);
// aを見に行けるので怒られない
}
ブロックとスコープという概念を勉強してみてください。
それを適切に使うためにも、コードを書くときはインデントを揃えるっていうのを意識するといいですよ。(意識せずともそろえてくれるエディタを使うとよいです)
@ichitom
Questioner変数には使える範囲(スコープ)があります。
次の例でいうと、変数a
はmainメソッドの中で宣言されたのでその中では使えますが、他のメソッドではスコープ外なので使えません。また、変数b
はif文の中で定義されたので、そのif文の外では使えません。
class Playground {
public static void main(String[ ] args) {
int a = 1;
if (true) {
int b = 2;
System.out.println(a); // OK
System.out.println(b); // OK
/* 変数 b が使えるのはここまで */ }
System.out.println(a); // OK
System.out.println(b); // NG
/* 変数 a が使えるのはここまで */ }
public void hoge() {
System.out.println(a); // NG
}
}