Java Bronzeのfor文纏め
新人にJava Bronzeを無理矢理取得させるために教えていたら侮ることなかれ、、。for文ですごい引っかけ問題が満載でした。
まずは無限ループになるパターンです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Main { | |
public static void main(String[] args) { | |
for(int i = 0;;i++) { // 無限ループになる。コンパイル、実行時エラーも発生しない。 | |
System.out.println(i); | |
} | |
} | |
} |
これはなんとなくわかります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Main { | |
public static void main(String[] args) { | |
for(;;) { // 無限ループになる。コンパイル、実行時エラーも発生しない。 | |
System.out.println("a"); | |
} | |
} | |
} |
これもわかります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Main { | |
public static void main(String[] args) { | |
for(int i = 0;;) { // 無限ループになる。コンパイル、実行時エラーも発生しない。 | |
System.out.println(i); | |
} | |
} | |
} |
こんな書き方しないので、さすがにちょっと悩みますが、これも無限ループになりますのでご注意ください。
スコープ
for文の引っかけ問題でスコープがあったので紹介しておきます。60問くらいを60分くらいで解かないといけないので1問1分(未確認)くらいなので焦ってしまいますね。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Main { | |
public static void main(String[] args) { | |
for(int i=0;i < 5;i++) { | |
if(i >= 3) break; | |
} | |
System.out.println(i); // ここよくよく見るとスコープ外! | |
} | |
} |
超絶怒涛の引っかけ問題ですね。for文の問題と思いきや、単なるスコープの問題です。
forの中でのみiは見えるので、そのブロック外からは見えないのでコンパイルエラーとなるのが正解です。お気を付けください。
空ステートメント
for文で無限ループやネストなどで、インクリメントで同じ変数を使うなど、引っかけ問題が多いですが、恥ずかしながら一番悩んでしまったのは以下です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Main { | |
public static void main(String[] args) { | |
int i = 0; | |
for(i = 0;i<5;i++); // どうなのこの書き方。。。 | |
System.out.println(i); // 4と出力される | |
} | |
} |
こんな意味のないコードを実務で書くことは絶対にないはずですが、Javaの基礎を勉強する上では覚えておかないといけないのかもしれません。。。
結果は4と出力されるのですが、for文はステートメントが1文の場合は{}が省略できるので、以下のように書き直すとわかりやすいと思います。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Main { | |
public static void main(String[] args) { | |
int i = 0; | |
for(i = 0;i<5;i++) | |
; // 空ステートメントが5回ループされる | |
System.out.println(i); | |
} | |
} |
これを理解できれば60%位取れるんじゃないですか。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント