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

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

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

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

Q&A

解決済

3回答

2363閲覧

色を判断するメソッドをboolean型で作りましたがコンパイルエラーされてしまいます。

chimo

総合スコア55

Java

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

0グッド

0クリップ

投稿2020/03/10 05:01

車のボディーのカラーが正式なカラーバリエーション(白、黒、赤)に属さない色を渡された場合は、〇〇(色名)は正式なカラーバリエーションに属しません。BLACK/WHITE/REDから選択してください。と表示させたいです。
上記を実現させるために以下のようにコーディングしました。

Java

1//paintメソッド(引数あり、戻り値なし(ここが呼び出し元なので)、色をぬる、正式なカラーバリエーションの範囲内かをチェックするメソッドを呼び出す) 2 public void paint( String cl ){ 3 if( colorCheck(cl) = true ) { 4 this.carColor = cl ; 5 }else if( colorCheck(cl) = false ){ 6 System.out.println( cl + "は正式なカラーバリエーションに属しません。BLACK/WHITE/REDから選択してください。" ) ; 7 } 8 } 9 10 //colorCheckメソッド(外部からいじれない、引数あり、戻り値boolean、カラーはWHITE/BLACK/RED) 11 private boolean colorCheck( String cl ) { 12 boolean colorResult = false ; 13 14 if(cl.equals("WHITE")||cl.equals("BLACK")||cl.equals("RED")){ 15 colorResult = true ; 16 } 17 18 return colorResult ; 19 }

これをコンパイルすると以下のようなエラーが出てきました。

【エラー内容】---------------------------
.\Car_function2.java:59: error: unexpected type
if( colorCheck(cl) = true ) {
^
required: variable
found: value
.\Car_function2.java:61: error: unexpected type
}else if( colorCheck(cl) = false ){
^
required: variable
found: value
2 errors
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

おそらく、if(colorCheck(cl) = true){...と書くのではなく、if(colorCheck(cl) ){...と書けということだと思うのですが、この部分が分かりません。

colorCheckメソッドでtrueだと判断されればtrueが戻り値としてpaintメソッドのcolorCheck(cl)に代入されるはずと考えました。

すなわち、もしtrueだった場合、if(colorCheck(cl) ){...と書いていれば戻り値のtrueを受け取って if( true ){... と変換されるのではないかなと思いました。

しかしそうすると、何がtrueなのかわからないし、falseだった場合の場合分けもできなくなると考えました。

どのようにコードを書けば場合分けがちゃんとできるでしょうか。きちんと理解もしたいので、コードの理由も一緒に教えていただきたいです。よろしくおねがいします。

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

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

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

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

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

guest

回答3

0

=が代入なのはすでに出てるので。

すなわち、もしtrueだった場合、if(colorCheck(cl) ){...と書いていれば戻り値のtrueを受け取って if( true ){... と変換されるのではないかなと思いました。

しかしそうすると、何がtrueなのかわからないし、falseだった場合の場合分けもできなくなると考えました。

前半については質問者様の思っている通りです。
後半(しかしそうすると…)については、メソッド名で「何がtrueなのか」分かるようにするのが一般的かなと。

java

1 if(isHoge("hoge")) { 2 System.out.println("hogeです"); 3 } else { 4 System.out.println("hogeじゃないです"); 5 } 6 7 8 private boolean isHoge(String str) { 9 return str.equals("hoge"); 10 }

(falseだった場合の場合分けは、上記の例のように if{}else{}で可能です。)
今回の質問者様のコードのように、引数が妥当な値かを判別するメソッドであれば
is〇〇等で良いのではないかなと。
isValidColor()とか。

投稿2020/03/10 05:14

tetutetu

総合スコア419

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

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

chimo

2020/03/10 05:41

なるほど!そういう方法があったのですね!勉強になりました、ありがとうございます!!
guest

0

ベストアンサー

=代入なので、colorCheck(cl) = true では「関数の結果に代入する」となってしまって意味が通りません。

そして、ifのカッコ内にはbooleanの式を置くので、わざわざtrueと比較しなくてもif( colorCheck(cl) )だけで大丈夫です。

投稿2020/03/10 05:04

maisumakun

総合スコア146018

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

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

maisumakun

2020/03/10 05:05

> しかしそうすると、何がtrueなのかわからないし、falseだった場合の場合分けもできなくなると考えました。 elseとだけ書けばfalseの場合の振り分けができます。else ifは冗長なだけです。
chimo

2020/03/10 05:39

回答ありがとうございます。そうでした、=は代入でした。では、==と書けばいけますか?ifの()内にはtrueかfalseかしか返らないと思うのでやっぱり if colorCheck( cl )だけしかifの()内に書かないのは理解が難しいです。
maisumakun

2020/03/10 05:44

> ifの()内にはtrueかfalseかしか返らないと思うのでやっぱり if colorCheck( cl )だけしかifの()内に書かないのは理解が難しいです。 すみません、何がわからないのか理解ができません。 「colorCheck( cl )の返り値がbooleanであること」も「ifのカッコ内にはbooleanの値を書く」こともわかっているのに、この2つを組み合わせられない、という判断の根拠がわかりません。
maisumakun

2020/03/10 05:45

「colorCheck( cl )の返り値」は「trueかfalseのどちらか」です。
maisumakun

2020/03/10 05:50

書きたければ「if(colorCheck( cl ) == true)」と書いてもいいのですが、全く無意味です。
chimo

2020/03/10 07:08

わたしにもなぜ自分が理解できないのかわかりませんがひとまずそういうもんなんだと受け入れて慣れることにします。
guest

0

=だと代入です。

投稿2020/03/10 05:03

m.ts10806

総合スコア80875

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

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

chimo

2020/03/10 05:40

では==と書けばいけますか?
m.ts10806

2020/03/10 05:49

と、書いてる間に試せるのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問