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

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

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

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

Q&A

解決済

4回答

5563閲覧

booleanのif文

Tutti

総合スコア83

Java

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

0グッド

0クリップ

投稿2016/08/02 00:29

この式の最初のコードのところで、なんのために false を errFlag へ代入しているのかわかりません。
教えていただけませんか?

それと、if文の理解はこのような形でよろしいでしょうか?
入力されたものを、if文でヒットするか調べてtrueになったものを errFlag へ代入。

falseの場合は処理されないで次のコードへ。

boolean errFlag = false; if (!ope.equals("kake")){ if (!ope.equals("waru")){ if (!ope.equals("tasu")){ if (!ope.equals("hiku")){ errFlag = true; } } } }

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

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

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

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

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

guest

回答4

0

ローカル変数は初期化必須です。だから false で初期化しています。
初期化の位置は、変数宣言時でなくても構いません。
ただし、その初期化する部分のコードを必ず通る必要があります。
そうでなけばコンパイルエラーです。

if 分に関してですが、4つのどれでもなければエラーということにしたいのであれば、
それで合っていますが、&& で繋いで書くこともできます。

Java

1if (!ope.equals("kake") && !ope.equals("waru") && !ope.equals("tasu") && !ope.equals("hiku")) { 2 errFlag = true; 3}

以下のような書き方もできます。

if (Stream.of("kake", "waru", "tasu", "hiku").noneMatch(ope::equals)) { errFlag = true; }

例えば、これらの if文の else 部分に、errFlag = false を入れておけば、
boolean errFlag; の部分で初期化しなくても構いません。
if と else の両方で、errFlag が初期化されており、必ずどちらかになるからです。

if文の中の処理が、errFlagの変更のみなのであれば、そもそも ifを削ることもできます。

Java

1boolean errFlag = Stream.of("kake", "waru", "tasu", "hiku").noneMatch(ope::equals)

あとはお好みでどうぞ。

投稿2016/08/02 01:03

編集2016/08/02 01:08
root_jp

総合スコア4666

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

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

0

なんのために false を errFlag へ代入しているのかわかりません。

最初にエラーなしの状態にしておいて全てのif文を通過した場合(文字列が当てはまらない)場合にエラーにしているのだと思います。

投稿2016/08/02 00:35

cateye

総合スコア6851

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

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

Tutti

2016/08/02 00:45

ですよね!! 分かりました!お答えいただき、ありがとうございます。
cateye

2016/08/02 13:40 編集

蛇足になりますが、こういう複数の判定があるとき、一番起こりやすい事象を先に判定するほうが(判定の回数が減るので)効率がいいです。(特殊な用途以外の)計算なら足し算が一番多いでしょうから"tasu"でない場合を先に判定するとか・・・。
Tutti

2016/08/02 15:24

そうなんですか!わかりました!今後、もう少し効率のことも考えてコードを書いていくようにします。アドバイス、ありがとうございます!!!!
guest

0

ベストアンサー

>それと、if文の理解はこのような形でよろしいでしょうか?

opeの内容が"kake"でもなく、"waru"でもなく、"tasu"でもなく、"hiku"でもなければ、
errFlag にtrueを代入です。

投稿2016/08/02 00:35

jm1156

総合スコア866

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

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

Tutti

2016/08/02 00:43

trueは必ず代入しなくてもいいですよね? 当てはまらなかったら、初期値のfalseと出すことも可能ですよね?
Tutti

2016/08/02 01:06

あの、もう一つ質問させてください。 ”C”が入力されたら、起動時の状態に戻したいのですが、この場合は、変数を全てもう一度初期化してあげるといいということでよろしいのでしょうか?
guest

0

この式の最初のコードのところで、なんのために false を errFlag へ代入しているのかわかりません。

教えていただけませんか?

javaのbooleanの初期値はfalseなので、あまり意味は無いですね。
あるとすれば、初期値がfalseだということを知らない人のために、明示的にfalseを代入しているのかもしれません。

投稿2016/08/02 00:33

jm1156

総合スコア866

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

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

Tutti

2016/08/02 00:40

なるほど!!!わかりやすく伝えるためだったんですね! 了解いたしました。 お答えいただき、ありがとうございます。
Tutti

2016/08/02 01:03

あ、そうでした。if{}の外でも使うなら、フィールド変数にしないといけないですね! 忘れるところでした!補足をどうもありがとうございます。
root_jp

2016/08/02 01:13

現時点で、if の外で宣言されているので、if の外でも使えます。 フィールドに宣言する必要はありません。
eripong

2016/08/02 01:39

そうですね。私のコメントは、「javaのbooleanの初期値はfalseなので、あまり意味は無いですね。 」に対する反論で、ローカル変数である限り初期値を指定することに意味はあって、何らか指定しないとコンパイルエラーですよ、と言うことでした。
root_jp

2016/08/02 01:42

私は、「if{}の外でも使うなら」に対してです。 「javaのbooleanの初期値はfalseなので、あまり意味は無いですね。 」 に関しては、全くもって eripong さんの言う通りです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問