質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2453閲覧

JavaSilver(ローカル変数)

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/12/08 11:48

1, public class Main{ 2, public static void main(String[] args){ 3, int x; 4, int y = 3; 5, if(y > 2){ 6, x = ++y; 7, y = x + 5; 8, }else{ 9, y++; 10, } 11, System.out.println(x + ", " + y); 12, } 13, }

Java SE 11 Silver黒本(第12章-63問)、ローカル変数の初期化に関する問題です。

解説には、5行目のif文の条件式がfalseと判定されると書いてあるのですが、y = 3であるにも関わらずなぜfalseとなるのでしょうか。また、この式では、変数xが初期化されることなく出力されてしまうため、コンパイルエラーとなると書いてあるのですが、ここでの変数xとは3行目のxをローカル変数と捉えればよろしいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

お使いの「Java SE 11 Silver [1Z0-815]対応問題集」(通称:黒本)はおそらく初版のものだと思います。本質問で挙げられている第12章-63問は訂正が入っていますので参照してみてください。(「5行目のif文の条件式がfalseと判定」は誤りです)

徹底攻略Java SE 11 Silver問題集[1Z0-815]対応 お詫びと訂正 - インプレス


ご質問に答えていない部分があったので追記しました:

y = 3であるにも関わらずなぜfalseとなるのでしょうか。

この点、本の記述が誤りであることは前述のとおりですが、

また、この式では、変数xが初期化されることなく出力されてしまうため、コンパイルエラーとなると書いてあるのですが、ここでの変数xとは3行目のxをローカル変数と捉えればよろしいでしょうか。

はい、そうです。3行目のint x;はローカル変数の定義ですが、初期化はしていなく、そのまま11行目のコードで読み取ろうとしていることをコンパイラが検出した為に、コンパイルエラーが起きます。

CMD

1C>javac -version 2javac 11.0.9 3 4C>javac Main.java 5Main.java:11: エラー: 変数xは初期化されていない可能性があります 6 System.out.println(x + ", " + y); 7 ^ 8エラー1個 9

投稿2020/12/08 13:10

編集2020/12/09 01:04
dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/09 06:01

ご説明ありがとうございます。追加でご質問なのですが、なぜ3行目のxはフィールドではなく、ローカル変数なのでしょうか。
dodox86

2020/12/09 06:17

> なぜ3行目のxはフィールドではなく、ローカル変数なのでしょうか。 そもそもが試験問題の為の問題、だからでしょうか。つまり、「未初期化のローカル変数を読み取りに使うと、コンパイル時にそれを検出できればエラーになる。」ということを問いたい問題だからだと思います。これをstaticのフィールド、例えば「private static int x;」とすると、コンパイルエラーにはならず、intの既定値0 で動作し、実行の結果も「4, 9」になります。
dodox86

2020/12/09 06:48

、、、と言う回答で答えになっておりますでしょうか。
退会済みユーザー

退会済みユーザー

2020/12/14 05:39

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問