Java Bronzeのfor文纏め

Java Bronzeのfor文纏め

新人にJava Bronzeを無理矢理取得させるために教えていたら侮ることなかれ、、。for文ですごい引っかけ問題が満載でした。

まずは無限ループになるパターンです。


public class Main {
public static void main(String[] args) {
for(int i = 0;;i++) { // 無限ループになる。コンパイル、実行時エラーも発生しない。
System.out.println(i);
}
}
}
view raw

infinite

hosted with ❤ by GitHub

これはなんとなくわかります。


public class Main {
public static void main(String[] args) {
for(;;) { // 無限ループになる。コンパイル、実行時エラーも発生しない。
System.out.println("a");
}
}
}
view raw

infinite

hosted with ❤ by GitHub

これもわかります。


public class Main {
public static void main(String[] args) {
for(int i = 0;;) { // 無限ループになる。コンパイル、実行時エラーも発生しない。
System.out.println(i);
}
}
}
view raw

infinite

hosted with ❤ by GitHub

こんな書き方しないので、さすがにちょっと悩みますが、これも無限ループになりますのでご注意ください。

スコープ

for文の引っかけ問題でスコープがあったので紹介しておきます。60問くらいを60分くらいで解かないといけないので1問1分(未確認)くらいなので焦ってしまいますね。


public class Main {
public static void main(String[] args) {
for(int i=0;i < 5;i++) {
if(i >= 3) break;
}
System.out.println(i); // ここよくよく見るとスコープ外!
}
}
view raw

scope

hosted with ❤ by GitHub

超絶怒涛の引っかけ問題ですね。for文の問題と思いきや、単なるスコープの問題です。

forの中でのみiは見えるので、そのブロック外からは見えないのでコンパイルエラーとなるのが正解です。お気を付けください。

空ステートメント

for文で無限ループやネストなどで、インクリメントで同じ変数を使うなど、引っかけ問題が多いですが、恥ずかしながら一番悩んでしまったのは以下です。


public class Main {
public static void main(String[] args) {
int i = 0;
for(i = 0;i<5;i++); // どうなのこの書き方。。。
System.out.println(i); // 4と出力される
}
}
view raw

infinite

hosted with ❤ by GitHub

こんな意味のないコードを実務で書くことは絶対にないはずですが、Javaの基礎を勉強する上では覚えておかないといけないのかもしれません。。。

結果は4と出力されるのですが、for文はステートメントが1文の場合は{}が省略できるので、以下のように書き直すとわかりやすいと思います。


public class Main {
public static void main(String[] args) {
int i = 0;
for(i = 0;i<5;i++)
; // 空ステートメントが5回ループされる
System.out.println(i);
}
}
view raw

infinite

hosted with ❤ by GitHub

これを理解できれば60%位取れるんじゃないですか。

コメント

タイトルとURLをコピーしました