ichitom
@ichitom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Javaのif文のエラーを解決したい 【Java基礎 chapter7-8】

Q&A

Closed

以下のコードのエラーを解決したいです。
エラーの内容として「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); ←エラー

 }
}


0

3Answer

変数が不適切、ではなく宣言の位置が不適切 ですね。

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を見に行けるので怒られない
}

ブロックとスコープという概念を勉強してみてください。
それを適切に使うためにも、コードを書くときはインデントを揃えるっていうのを意識するといいですよ。(意識せずともそろえてくれるエディタを使うとよいです)

0Like

Comments

  1. @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
    }
}
0Like

Your answer might help someone💌