for構文内の変数に関する質問

このQ&Aのポイント
  • 変数kの値が0に戻る理由について説明します。
  • for構文を脱出すると変数の中身はクリアーされますが、ローカル変数の中身だけがクリアーされます。
  • ソースコード内でfor構文がネストしている場合、内側のfor構文が終了すると外側のfor構文の変数も初期化されます。
回答を見る
  • ベストアンサー

for構文内の変数について質問

以下のソースコードの一部を見た上で私の質問に答えてください public class A { public static void main(String arg[]){ for(int i=0; i<2; i++){ for(int k=0; k<3; k++){ System.out.println(i+"-"+k); } } } } このソースコードを実行すると、以下のような数字がeclipsのコンソール画面に表示されます。 0-0 0-1 0-2 1-0 1-1 1-2 質問:変数kの値は、1、2と増えているに関わらず、再び0に戻ってますよね? 何故変数の中身の数値がクリアーされてるのですか? 質問2:for構文を一度脱出すると、変数の中身はクリアーされるのですか?それとも『ローカル変数の中身だけクリアー』されるのですか?

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#161640
noname#161640
回答No.2

>何故変数の中身の数値がクリアーされてるのですか? 変数の中身がクリアされているわけではありません。途中、変数そのものが消滅し、また新たに作られているのです。 0-0 0-1 0-2 ここでfor(int k=0; k<3; k++)の{}を抜けた時点で、変数kは消滅しています。再び繰り返しでfor(int k=0; k<3; k++)に入るとき、改めて新しく変数kが作られ、0で初期化されます。 1-0 1-1 1-2 変数のスコープについて調べてみるとよくわかると思います。

wantanton
質問者

お礼

丁重なご回答誠にありがとうございます! スコープという概念について早速調べてみますね!!!! ありがとうございます! 最高!

その他の回答 (1)

  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.1

for i=0のときのループでk=0が設定されて、k=2までループします。 次にfor i=1のループが始まるときに、k=2になっていた変数に、 k=0がfor文によって再設定上書きされるからです。

wantanton
質問者

お礼

丁重なご回答誠にありがとうございます! 参考になります!

関連するQ&A

  • Loop後に変数が出力できないです

    最後のprintlnで、LabelBreak.java:13: シンボルを解釈処理できません。とi j kの変数が解釈できずコンパイルが失敗しますがなぜでしょうか? class LabelBreak { public static void main(String[] args) { for(int i = 0; i < 10; i++) { label1: for(int j = 0; j < 10; j++) { for(int k = 0; k < 10; k++) { System.out.println("i = " + i + ", j = " + j + ", k = " + k); if(k == 3) break label1; } } } System.out.println("Loop end"); System.out.println("i = " + i + ", j = " + j + ", k = " + k); } } ^

    • ベストアンサー
    • Java
  • 拡張for文について質問

    以下は、拡張for文と配列に関するソースコードの一部を抜粋したものです。 それを見た上で、私の質問に答えてください。 int[]a={10,5,8,4,3}; for(int n:a){ System.out.print(n+" "); } int[][]a={{1,2},{4,5,6}}; for(int[]n:a){ for(int k:n){ System.out.print(k+" "); } System.out.println(""); } 質問1:何故、前者の配列は、『for(int n:a)』のように[]がついてなくても配列要素が取り出せるのに、後者の多次元配列は『for(int[]n:a){』のように『[]』がついた拡張for文を書いた上で、下にも拡張for文を書いた2重構造でないと配列要素を取り出せないのですか? 後者について『for(int n:a){』の文だけで多次元配列aの要素全て取り出せると思ってました。 因みに、配列変数には配列要素が入ってるのではなくて「参照」が入ってるのはわかってます。 このことと、何か関係があるのか、、?

    • ベストアンサー
    • Java
  • while構文について質問

    以下は、ソースコードの一部です。それを見た上で私の質問に答えてください。 int i=0; while(true) System.out.println(i); i++ 質問:何故、whileの反復条件に「true」を書くと、無限ループになるのですか? 私の仮説では、trueは「条件を満たす」という意味だから、よって反復条件を満たし続けるので、永遠にiを表示し続けるということでしょうか?

    • ベストアンサー
    • Java
  • for文について

    for文を使って、以下のような図形を作成してますが、 どうしてもうまく作れません。 どなたか教えていただけないでしょうか? 現在出来ているソースは次のようです。 まるで異なる図形になってしまいますが。 public class kurikaeshi { public static void main(String[] args) { int i = 0, j = 0, k = 0, l=0; for(i = 0; i < 10; i++) { for(j = 0; j < i + 1; j++) { for(k = 0; k < 2*j; k++) { System.out.print(" "); } for(l = 0; l < (2*i + 1) - 2*k; l++) { System.out.print("*"); } System.out.println(); } } } } + +++ + +++++ +++ + +++++++ +++++ +++ + +++++++++ +++++++ +++++ +++ + +++++++++++ +++++++++ +++++++ +++++ +++ +

  • 変数をランダム発生させる

    http://security.okwave.jp/kotaeru.php3?qid=2243075 上記の質問に回答しようとしましたが締め切られているので皆さんに公開して問題点を指摘していただきたいと思います。 import java.io.*; class RandomEditor { public static void main(String args[]){ try{ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while(true){ System.out.println("変数は幾つ創りますか?"); int var = Integer.parseInt(reader.readLine()); int[] variable = new int[var]; for(int i = 0; i<variable.length;i++){ variable[i] = i + 1; } System.out.println("変数は" + variable.length + "個創りました"); double[] probability = new double[variable.length]; for(int i = 0; i<variable.length;i++){ System.out.println("変数" + (i + 1) + "の発生率を%で入力してください"); probability[i] = Double.parseDouble(reader.readLine())/100; } setProbability(variable,probability); break; } }catch(IOException e){ System.out.println(e); } } public static void setProbability(int[] v,double[] p){ int i = 0; StringBuffer[] sbArray = new StringBuffer[v.length]; for(int n = 0;n<v.length; n++){ sbArray[n] = new StringBuffer(); } for(int k =0; k<10;k++){ double randomNumber = Math.random(); for(i = 0; i < v.length ; i++){ if(randomNumber < p[i]){ sbArray[i].append("* "); } } } for(i=0;i<v.length;i++){ System.out.println("変数:"+(i+1)+"の発生度数" + sbArray[i].toString()); } } }

    • ベストアンサー
    • Java
  • forループに慣れるには

    初めまして。 今資格を取ろうと思い独学でJavaを勉強してるんですが、 つまらない部分でつまずいています。 それは少々複雑なfor等のループです。 変数を追っていくうちにこんがらがってしまい、 変数の正しい値を見失ってしまいます。 例えば… Loop: for(int i = 0; i<5; i++) { for(int j =0; j<5; j++) { if(i==j) continue Loop; System.out.println("i = " +i+ "j = " +j); if(i > 3) break Loop; } } や、 int i,j; for(i = 0, j = 0; i<3;) { if(i++ == 2 || j++ == 2) break; } System.out.println(i); System.out.println(j); の様なループです。 試験範囲は大方勉強出来てるんですが まぬけな事にループがイマイチ理解出来てなくて(恥) 皆さんはどうやって慣れてこられましたか? つまらない質問ですが何か良いコツやアドバイスがあれば よろしくお願いします。

  • for文に使用する変数

    よく for(i=0;i<10;i++){ ”なんらかの処理” } みたいなソースがありますがここで使用する変数iはint型がよいと何かでみました。 数値が1byteで足りる分にはcharのほうがメモリ節約ができると思うのですが、どういった理由があるのでしょうか? どなたか知っている方はお教えください。

  • 変数を動的に利用するには?

    Javaプログラミングの質問です。 下記のように変数を定義しておき、 String aaa_0 = "AAA1"; String aaa_1 = "AAA2"; 例えば、これらの変数の値を次のようにして使えますでしょうか? (できませんが、やりたいことは、なんとなく伝わったかと思います。) for(int i=0;i<2;i++){ System.out.println("aaa_" + i); } 変数を動的に呼び出せますでしょうか? アドバイスお願い致します。

  • java for文、if文を使っての三角形

    例:1 23 456 78910 ・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を   作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが   出来るのか教えてください。お願いします。 public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。 int a = 1; //行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。 int b = 1; // 1~100までの数字を用意する。 for (int i = 1; i <= 100; i++) { //変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。 System.out.print(i); //System.out.println("")を使って改行する。 System.out.println(" "); //変数iに1増加して数字を順番にする。 i++; if(a <= i){ System.out.print(a);

  • javaのローカル変数について

    基本的なことの質問ですがよろしくお願いいたします。 下記の様なソースコードでint y ;はローカル変数にあたると思いますが 確かローカル変数は初期化されないとコンパイルエラーになるはずなのですが どうもコンパイルも実行もできます。 どうしてでしょうか? よろしくお願いいたします。 class Test1{ static int x = 0; } public class Test extends Test1{ public static void main(String args[]){ Test i = new Test(); int y ; y = ++x; System.out.println( y ) ; } }

    • ベストアンサー
    • Java

専門家に質問してみよう