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

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

ただいまの
回答率

90.03%

java問題集 While文 初期化?

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 577

bonobiya

score 13

while文って変数の明示的な初期化って必要なんですか?
Javaの問題集に下記のような問題がありました。

int num = 0, count;
while(num > 3){
 num++;
 //ここにコードを挿入
 System.out.println("num =" + num + ": count = " + count);
 }
}


6行目(ここにコードを挿入の箇所)に挿入した際に次の出力を生成するコードは次のどれですか?
num = 1 : count = 1
num = 1 : count = 2
num = 2 : count = 1
num = 2 : count = 2
num = 3 : count = 1
num = 3 : count = 2

選択肢が
A while(++count < 3){
B 省略
C for(count = 1;count < 3;count++){
で私はAを選択したんですが、Cが正解でした。

解説には「Aはwhile文を使用していますが、count変数が初期化されていないため、コンパイルエラーになります。」
となっていたんんですが、
int num = 0, count;
の箇所で0で初期化されているんではないでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

Javaではプリミティブ型変数にデフォルトで値0が与えられますが、ローカル変数についてはデフォルト値が与えられないため初期化せずに使用しようとするとコンパイルエラーとなります。
基本的に値には初期値を入れるか、使用前に代入しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/06 20:08

    回答ありがとうございました。

    キャンセル

+1

「初期化」とは何か?は割と難しい話題です。

int count;

とすればcount変数はとりあえず宣言されます。
ただしメモリ空間上にそういう名前で扱える領域が確保されただけで、まだ値は代入されていません。つまりこの変数に対し初期値は与えられていません。
その状態でインクリメントしようとすると、まだ値が入っていないものをインクリメントなどできるはずがなくコンパイルの時点でエラーになります。

一方、

int count = 0;


とするとメモリ空間上に領域が確保され、かつ同時に初期値として0が代入されます。

後者の動作を、その問題集でのこの場合では「初期化」と呼んでいるようです。
文脈によって初期化という言葉が指す意味は変わりがちです。
個人的にはそこに曖昧さがあるため、あまり初期化という言葉は好んで使いません。

重要なのは「初期化」が何か、というよりも上記のような動きをしっかりと捉えることです。
「宣言された」という状態ではまだ値が代入されていない、そこの認識が確実にあれば、この問題では迷うことが無くなるはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/06 20:08

    回答ありがとうございました。

    キャンセル

0

int a,b;


こういう代入方法ありますよね。これをふまえて下を見ると

int num = 0, count;


はnum=0になってるのにcountには何もされてません。
つまりこれはnumとcountという変数を作りnumに0を代入しただけに過ぎないのです。
なのでcountは初期化されてません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/06 20:08

    回答ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る