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

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

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

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

Q&A

解決済

3回答

1662閲覧

java問題集 While文 初期化?

bonobiya

総合スコア15

Java

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

0グッド

0クリップ

投稿2017/04/30 12:37

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

java

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

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で初期化されているんではないでしょうか?

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

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

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

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

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

guest

回答3

0

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

Java

1int count;

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

一方、

Java

1int count = 0; 2

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

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

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

投稿2017/04/30 14:09

akabee

総合スコア1947

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

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

bonobiya

2017/05/06 11:08

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

0

ベストアンサー

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

投稿2017/04/30 13:25

massy7

総合スコア45

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

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

bonobiya

2017/05/06 11:08

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

0

int a,b;

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

int num = 0, count;

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

投稿2017/04/30 13:03

toutou

総合スコア2050

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

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

bonobiya

2017/05/06 11:08

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問