最後の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);
}
}
^
No.2ベストアンサー
- 回答日時:
おや?投稿したはずが反映されていないので、もう一度。
重複したときは失礼。
Java の変数には二種類あります。
・クラスのメンバーになる変数(フィールド)
・ローカル変数
フィールドはクラスをインスタンス化したオブジェクト固有のもので、オブジェクトと共に持続します。メモリ上の領域を占有するという事です。
ローカル変数は暮らすのメソッド内で定義されており、制御がメソッドを抜ければメモリ上から消失します。
フィールドは初期化しないでも省略値が代入されるので使えますが、ローカル変数は明示的に初期化しないとコンパイル時にエラーになります。
// 初期化方法1:
int i;
i=0;
// 初期化方法2:
int j = 0;
さらに、クラスはブロックの階層で考える事が出来て、下層階層でだけ初期化してもコンパイルエラーになります。
ブロックとは { から } までの間の事です。
1.簡単な例
int sum = 0;
for (int i = 0; i < 10; i++) {
sum = sum + i;
}
System.out.println(i + ", " + sum);
このとき、 i は for ブロック内で定義されているので制御がループを抜けるとメモリ上からドロップされて使えなくなります。
2.ややこしい例
int i, sum;
for (i = 0; i < 10; i++) {
sum = sum + i;
}
System.out.println(i + ", " + sum);
このときは、定義された階層以下のブロック内で初期化されているので、コンパイラはループの外では定義されていないかもしれない危険性を鑑み、コンパイルエラーを出します。ブロック内というのは、実行時の状況によっては制御が移らないかもしれないので、コンパイル時には別個のものとして解析されているのです。
うまく説明できませんが、これで分かるでしょうか?
No.1
- 回答日時:
変数j, kは,
i によるfor ループのブロックの中で宣言されたローカル変数なので,
そのブロックの外からは参照できません.
(C だったらこうだと思うんですが,Javaでもそうではないですか?)
上が正しいなら,
public... の直後で i,j,k を宣言してしまえば
うまくいくような気がします.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby vscode 文字化け 1 2022/05/21 19:17
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
processingで String str="AAAB...
-
論理演算子”||”またはの入力方法
-
countに実行した回数をいれたい...
-
javaでforを用いて進数を変換す...
-
エラー(互換性の無い型)
-
繰り返しによる星印の出力
-
(急いでいます)Javaで3回間違...
-
2次元配列の並び替え
-
java キーボード入力された値の...
-
ループ処理の際、最後だけ","を...
-
配列を逆順させて表示させる方...
-
キーボードから10人分の点数を...
-
Ctrl+Zが入力されると終了する...
-
総称型ArrayList<E>への参照...
-
Java、2の0乗~10乗の表示
-
javaで九九の表を作りたい
-
ヒストグラム
-
javaのエラーが回収できない
-
Java 配列<選挙>
-
javaが上手くいきません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
コマンドライン引数の例外処理...
-
JAVAのfor文で困っています。
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Java 入力した整数値の合計を、...
-
7つ数字を表示したら改行すると...
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
総称型ArrayList<E>への参照...
-
Randomメソッドの確率設定
-
Ctrl+Zが入力されると終了する...
-
学校で課題を出されて困ってい...
-
Java キーボードから負の数が入...
-
階乗の式
-
キーボードから10人分の点数を...
-
Java 配列<選挙>
おすすめ情報