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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

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

Q&A

3回答

332閲覧

javaでのif分岐

noir-robin

総合スコア7

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

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

0グッド

0クリップ

投稿2018/12/01 15:34

前提・実現したいこと

こちら(http://kitako.tokyo/lib/JavaExercise.aspx?id=3)のサイトに掲載されいているjava練習問題集を利用させていただいているのですが、練習問題3-9が解けません。当方初心者ですので、大変初歩的な質問となってしまい恐縮ですがお力添えいただけると嬉しいです。

発生している問題・エラーメッセージ

火曜/金曜で試してみると"予約可能です"と"誠に申し訳ございません。休診日です"のメッセージが同時に出力されてしまいます。

該当のソースコード

package

1 2import java.io.BufferedReader; 3import java.io.IOException; 4import java.io.InputStreamReader; 5 6public class E3_9 { 7 8 public static void main(String[] args) { 9 // TODO 自動生成されたメソッド・スタブ 10 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 11 12 try { 13 14 System.out.println("希望診察日を入力してください 0:日曜1:月曜2:火曜3:水曜4:木曜5:金曜6:土曜"); 15 String line = reader.readLine(); 16 int date = Integer.parseInt(line); 17 18 System.out.println("希望のお時間を入力してください0:午前1:午後2:夜間"); 19 line = reader.readLine(); 20 int time = Integer.parseInt(line); 21 22 if(date != 0) { 23 if(date ==1||date ==4) { 24 System.out.println("予約可能です。"); 25 }if(date == 2) { 26 if(time ==1 || time==2) { 27 System.out.println("予約可能です。"); 28 }else { 29 System.out.println("誠に申し訳ございません。休診日です "); 30 }if(date == 5) { 31 if(time ==1 || time==2) { 32 System.out.println("予約可能です。"); 33 }else { 34 System.out.println("誠に申し訳ございません。休診日です "); 35 } 36 }if(date == 3) { 37 if(time ==0||time==1) { 38 System.out.println("予約可能です。"); 39 }else { 40 System.out.println("誠に申し訳ございません。休診日です "); 41 } 42 }else { 43 if(time == 0) { 44 System.out.println("予約可能です。"); 45 }else { 46 System.out.println("誠に申し訳ございません。休診日です "); 47 } 48 } 49 } 50 }else { 51 System.out.println("誠に申し訳ありません。休診日です。"); 52 } 53 54 } catch (IOException e) { 55 // TODO 自動生成された catch ブロック 56 e.printStackTrace(); 57 } 58 59 60 } 61 62} 63

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

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

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

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

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

guest

回答3

0

表をもとにすべてを分岐させるとどうしてもコードが長くなり、読みづらくなります

表をもとに開いていたらtrue,休診日ならfalseとして以下のような2次配列をあらかじめ用意します

java

1 boolean [][]data = { 2 {false,true,false,true,true,false,true}, 3 {false,true,true,true,true,true,false}, 4 {false,true,true,false,true,true,false} 5 };

あとは配列の番号に曜日と時間帯のそれぞれに対応する番号が入り一つのif~else文で書けます

java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) { 5 6 Scanner sc = new Scanner(System.in); 7 boolean [][]data = { 8 {false,true,false,true,true,false,true}, 9 {false,true,true,true,true,true,false}, 10 {false,true,true,false,true,true,false} 11 }; 12 int week = Integer.parseInt(sc.nextLine()); 13 int time = Integer.parseInt(sc.nextLine()); 14 15 if(data[time][week]){ 16 System.out.println("予約可能です"); 17 } 18 else{ 19 System.out.println("休診日です"); 20 } 21 } 22}

投稿2018/12/06 05:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

if分の使い方が間違っています。

Java

1if(date ==1||date ==4) { 23}if(date == 2) { // << ココ

これだと、date==1 || date == 4の場合はブロックの中を実行、それとは別に、次の date == 2なら次を実行となります。

あるブロック(date == 1 || date == 4)の条件が満たされなくて次に別の条件を書く場合は else if です。

Java

1if(date ==1||date ==4) { // dateが1か4なら次のブロックを実行 2 System.out.println("予約可能です。"); 3}else if(date == 2) { // <↑ が満たされない場合にdateが2なら実行

投稿2018/12/01 15:50

編集2018/12/01 15:51
toki_td

総合スコア2850

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

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

noir-robin

2018/12/02 09:26

迅速な回答ありがとうございました。早速試してみたところ、火曜日と金曜日で失敗していたところが正しく返されるようになりました! ありがとうございました。
guest

0

それぞれのif文の中で、System.out.println("予約可能です。"); などを出力するのではなく、if文の結果を格納するbooleanを用意して、最後に文字列を出すようにするといいのではないでしょうか。

そうすると原因がわかりやすくなるでしょう。参考までに、

java

1boolean result = false; 2 3if (date != 0) { 4 if (date ==1||date ==4) { 5 result = true; 6 } if (date == 2) { 7 if (time ==1 || time==2) { 8 result = true; 9 } 10 } if (date == 5) { 11 .... 12 } 13 .... 14} 15 16if (result) { 17 System.out.println("予約可能です。"); 18} else { 19 System.out.println("誠に申し訳ございません。休診日です "); 20}

投稿2018/12/01 15:48

A-pZ

総合スコア12011

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

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

noir-robin

2018/12/02 09:25

迅速なご回答ありがとうございました。boolean型の変数を用意しておけば書いてくださったとおりすっきりするのですね。試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問