javasilver se8 黒本 3章問17
class Main{ public static void main(String[] args){ int num = 10; if(num == 100) System.out.println("A"); else if(10<num) System.out.println("B"); else if(num==10) System.out.println("C"); else if(num==10) System.out.println("D"); } }
擬:なぜ1番下のif文は下から2個目のif文と同じ条件式で必ずそこへは行けないようになっているのに
実行不能コードがある:コンパイルエラーとならないのか
答:maisumakunさんが張ってくれたurl参照。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/22 20:18
2020/05/22 20:23
2020/05/22 22:55
退会済みユーザー
2020/05/22 22:56
2020/05/22 23:31 編集
2020/05/24 15:59
回答4件
0
ベストアンサー
このコード絶対に"D"いけないためコンパイルエラーだと
思っていたのに
とは限りません。というより、「絶対にたどり着けないコード」を完全に検知することは不可能です。
投稿2020/05/22 22:05
総合スコア145192
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/22 22:07
退会済みユーザー
2020/05/22 22:16
2020/05/22 22:20 編集
2020/05/22 22:24
退会済みユーザー
2020/05/22 22:24
退会済みユーザー
2020/05/22 22:26
2020/05/22 22:26
2020/05/22 22:26
退会済みユーザー
2020/05/22 22:34
2020/05/22 22:41
0
落ち穂拾いの回答です。
このコード"D"いかなくてコンパイルエラーだと
思っていたのに答えは"C"でした。なぜでしょうか。
これは実にナンセンスな質問です。
人間が「このコードがコンパイルエラーにならないのはなぜか?」「エラーになるコードではないのはなぜか?」に回答しようとすると、
- Javaの文法に則っていること
- コンパイル時点で検出されるすべての意味論的エラーのどれにも該当しないこと
を全部確かめて説明する必要があります。
そんな馬鹿な話はありません。
すでに回答に付いているとおり、コンパイルしてみればいいのであって↑を人間がやる必要も無いし、実際問題として不可能です。
投稿2020/05/22 21:10
総合スコア11042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/22 21:35
退会済みユーザー
2020/05/22 21:46
2020/05/22 22:04 編集
2020/05/22 22:04
2020/05/22 22:25
2020/05/22 22:28
退会済みユーザー
2020/05/22 22:28
退会済みユーザー
2020/05/22 22:29
2020/05/22 22:34 編集
2020/05/22 22:37
退会済みユーザー
2020/05/22 22:39
退会済みユーザー
2020/05/22 22:40
2020/05/22 22:47 編集
2020/05/22 22:47
退会済みユーザー
2020/05/22 22:48
2020/05/22 22:49
2020/05/22 22:51 編集
退会済みユーザー
2020/05/22 22:53
退会済みユーザー
2020/05/22 22:54
2020/05/22 23:09 編集
2020/05/22 23:17 編集
退会済みユーザー
2020/05/22 23:24
2020/05/22 23:33 編集
退会済みユーザー
2020/05/22 23:35
退会済みユーザー
2020/05/22 23:36
2020/05/22 23:37
2020/05/22 23:41 編集
退会済みユーザー
2020/05/22 23:43
2020/05/22 23:49
退会済みユーザー
2020/05/22 23:57
2020/05/22 23:59
2020/05/25 00:19 編集
0
コードがjavasilverでありました。このコード"D"いかなくてコンパイルエラーだと
思っていたのに答えは"C"でした。なぜでしょうか。
コンパイルエラーになるかどうかは試しに実行してみましょう。
Javaの開発環境が整っていなくても大丈夫です。実行だけであれば Java をWeb上で実行するサービスがあるので、そちらを使うと良いでしょう。
一番下のelseは取り敢えず入ってしまうものなんですか?有識者お待ちしております。
追記に書いたコンパイルエラーを除いて、正しく動くものと想定します。
出力されるのは C なので一番下の else if(num == 10)
の条件判定はされていません。
一つ上のまったく同じ条件である else if(num==10)
が真と評価され、C が出力されています。
詳しくはリファレンスか教材に記載されているif
、else if
、else
の解説を再確認してください。
投稿2020/05/22 20:26
総合スコア2663
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/22 20:29
退会済みユーザー
2020/05/22 21:59
2020/05/22 22:02 編集
退会済みユーザー
2020/05/22 22:11
退会済みユーザー
2020/05/22 22:15
2020/05/22 22:16
退会済みユーザー
2020/05/22 22:19
2020/05/22 22:19
2020/05/22 22:20
退会済みユーザー
2020/05/22 22:22
退会済みユーザー
2020/05/22 22:23
0
一回、「どういう書き方をすると到達不能コードになるか」のあらゆるパターンを説明でき、かつ到達可能なコードに対して誤判定しないフローチャートを考えてみてください。
例えば、あなたが考えるような「if-else ifの中で全く同じ条件式の場合はたどり着かない」とした場合、次のコードでは本来到達できるはずなのに到達できないと判定されてしまいます。
java
1int num = (何らかの入力); 2if (num++ > 10) { 3 //do something 4} else if (num++ > 10) { // 到達不能?いいえ、可能です。 5 //do something 6}
投稿2020/05/24 00:39
総合スコア20651
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/24 06:54
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。