for文の中で宣言した変数のスコープ - 萌えJava超入門
第十三章 変数とスコープ

for文の中で宣言した
変数のスコープ

宣言してから、for文の「 }」(閉じ波カッコ)までが変数のスコープです。

目次



1.for文の中で宣言した変数のスコープ

宣言してから、for文の「 }」(閉じ波カッコ)までが変数のスコープです。
「初期化式」の部分で宣言した変数も、for文の「{}」(波カッコ)の中がスコープになります。
//Sample08_034.java
class Sample08_034{

    static final char CH_START = 'a';
    static final char CH_END = 'z';

    static String[] method_for(char ch){
        String[] result = new String[2];

        if(CH_START > ch || ch > CH_END){
             return null;//ch が a~z の間でない
        }

        String str ="";
for(int i = CH_START; i<=ch; i++){ str += (char)i; }//スコープはここまで。
result[0] = str; str ="";
for(int i = ch; i<=CH_END; i++){ str += (char)i; }//スコープはここまで。
result[1] = str; return result; } public static void main(String[] args){ String[] strs = method_for('v'); System.out.println(strs[0]); System.out.println(strs[1]); } }

コマンドライン
>javac Sample08_034.java
>java Sample08_034
abcdefghijklmnopqrstuv
vwxyz

method_forメソッドの説明
  • 'a'から 引数 ch までの文字列を、resultの第一要素に代入します。
  • 引数 ch から 'z'までの文字列を、resultの第二要素に代入します。
  • String配列 resultを返します。


Sample08_034で、青い部分が、それぞれのループカウンタ変数 i のスコープです。
for文の中で宣言した変数は、「{}」(波カッコ)の外では使えません。
重複を気にしないで使用できます。



2.初期化式をfor文の外に書く

for文の外でカウント結果を
得たい場面は珍しくない。
↓の様な書き方もあるので参考にしてほしい。
「初期化式」の変数をfor文の外で使いたい時は、こんな書き方もあります。

//Sample08_035.java
class Sample08_035{

    static final char CH_START = 'a';
    static final char CH_END = 'z';

    static String method_for(char ch){

        if(CH_START > ch || ch > CH_END){
             return null;//ch が a~z の間でない
        }

        String str ="";

int i = 0;//forブロックの外で宣言 for(; i<26; i++){ str += (char)ch++; if(ch > CH_END)break; } i++; System.out.println("count: " + i);//forブロックの外で参照 return str;
}//スコープはここまで。 public static void main(String[] args){ String str = method_for('v'); System.out.println(str); } }

初期化式をfor文の外に書いた例だ。
本来初期化式を書く場所は空になっている。
スコープが宣言後のメソッド全体なった。




なんかトリッキーで
カッコイイっスね。
コマンドライン
>javac Sample08_035.java
>java Sample08_035
count: 5
vwxyz



3.while文で書いてみた

興味本位でwhile文にしてみた。
ループ条件とbreak条件が逆になるんだな。



書き方はいろいろあるのね。
//Sample08_036.java
class Sample08_036{

  static final char CH_END = 'z';
  static String method_while(char ch){
      String str ="";
int i = 0; while(ch <= CH_END){//ループ条件 str += ch; if(i>=26){//break条件 break; } ch++; i++; } System.out.println("count: "+ i); return str;
} public static void main(String[] args){ String str = method_while('v'); System.out.println(str); } }




for文の中で宣言した変数は外に出てこない。安心。

お疲れ様でした。




© 2019 awasekagami