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

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

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

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

Q&A

解決済

2回答

649閲覧

trueなのにelseの処理が反映されてしまう。

jirojiro1002

総合スコア2

Java

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

0グッド

0クリップ

投稿2022/08/15 03:05

入力した値によってif文で星座を判別し、星座に対応させた数字と名前を出力しそれを利用して占いをできるようにしたのですが、if文の処理がうまくいかないです。占いメソッドに渡す引数が、何故かelse文の処理をした場合の値になってしまいます。

else文の処理をしないようにしたいです。ご教授お願い致します。

Java

1System.out.println("あなたの誕生月を教えてください。"); 2 Scanner scanner1 = new Scanner(System.in); 3 Scanner scanner2 = new Scanner(System.in); 4 int month = 0; 5 int day = 0; 6 int m = 0; 7 int s = 0; 8 String s2 = null; 9 try { 10 do { 11 try { 12 month = scanner1.nextInt(); 13 if (month < 13) { 14 System.out.println(month + "月ですね"); 15 m = 1; 16 } else { 17 System.out.println("存在しません"); 18 System.out.println("もう一度入力してください"); 19 m = 0; 20 } 21 } catch (Exception e) { 22 // TODO 自動生成された catch ブロック 23 scanner1.nextLine(); 24 System.out.println("数字を入力してください"); 25 m = 0; 26 } 27 } while (m == 0); 28 do { 29 try { 30 System.out.println("次に日付を教えてください"); 31 day = scanner2.nextInt(); 32 if (month == 4 || month == 6 || month == 9 && day > 30 33 || month == 2 && day > 29 34 || day > 31) { 35 System.out.println("存在しません"); 36 System.out.println("もう一度入力してください"); 37 m = 0; 38 } else { 39 m = 1; 40 } 41 } catch (Exception e) { 42 // TODO 自動生成された catch ブロック 43 scanner2.nextLine(); 44 System.out.println("数字を入力してください"); 45 m = 0; 46 } 47 } while (m == 0); 48 if (month == 3) { 49 if (month == 3 && day < 21) { 50 System.out.println("あなたは、うお座ですね"); 51 s = 1; 52 s2 = "うお座"; 53 } else 54 System.out.println("あなたは、おひつじ座ですね"); 55 s = 2; 56 s2 = "おひつじ座"; 57 } 58 if (month == 4) { 59 if (month == 4 && day < 20) { 60 System.out.println("あなたは、おひつじ座ですね"); 61 s = 2; 62 s2 = "おひつじ座"; 63 } else 64 System.out.println("あなたは、おうし座ですね"); 65 s = 3; 66 s2 = "おうし座"; 67 } 68 if (month == 5) { 69 if (month == 5 && day < 21) { 70 System.out.println("あなたは、おうし座ですね"); 71 s = 3; 72 s2 = "おうし座"; 73 } else 74 System.out.println("あなたは、ふたご座ですね"); 75 s = 4; 76 s2 = "ふたご座"; 77 } 78 if (month == 6) { 79 if (month == 6 && day < 22) { 80 System.out.println("あなたは、ふたご座ですね"); 81 s = 4; 82 s2 = "ふたご座"; 83 } else 84 System.out.println("あなたは、かに座ですね"); 85 s = 5; 86 s2 = "かに座"; 87 } 88 if (month == 7) { 89 if (month == 7 && day < 23) { 90 System.out.println("あなたは、かに座ですね"); 91 s = 5; 92 s2 = "かに座"; 93 } else 94 System.out.println("あなたは、しし座ですね"); 95 s = 6; 96 s2 = "しし座"; 97 } 98 if (month == 8) { 99 if (month == 8 && day < 23) { 100 System.out.println("あなたは、しし座ですね"); 101 s = 6; 102 s2 = "しし座"; 103 } else 104 System.out.println("あなたは、おとめ座ですね"); 105 s = 7; 106 s2 = "おとめ座"; 107 } 108 if (month == 9) { 109 if (month == 9 && day < 23) { 110 System.out.println("あなたは、おとめ座ですね"); 111 s = 7; 112 s2 = "おとめ座"; 113 } else 114 System.out.println("あなたは、てんびん座ですね"); 115 s = 8; 116 s2 = "てんびん座"; 117 } 118 if (month == 10) { 119 if (month == 10 && day < 24) { 120 System.out.println("あなたは、てんびん座ですね"); 121 s = 8; 122 s2 = "てんびん座"; 123 } else 124 System.out.println("あなたは、さそり座ですね"); 125 s = 9; 126 s2 = "さそり座"; 127 } 128 if (month == 11) { 129 if (month == 11 && day < 23) { 130 System.out.println("あなたは、さそり座ですね"); 131 s = 9; 132 s2 = "さそり座"; 133 } else 134 System.out.println("あなたは、いて座ですね"); 135 s = 10; 136 s2 = "いて座"; 137 } 138 if (month == 12) { 139 if (month == 12 && day < 22) { 140 System.out.println("あなたは、いて座ですね"); 141 s = 10; 142 s2 = "いて座"; 143 } else 144 System.out.println("あなたは、やぎ座ですね"); 145 s = 11; 146 s2 = "やぎ座"; 147 } 148 if (month == 1) { 149 if (month == 1 && day < 20) { 150 System.out.println("あなたは、やぎ座ですね"); 151 s = 11; 152 s2 = "やぎ座"; 153 } else 154 System.out.println("あなたは、みずがめ座ですね"); 155 s = 12; 156 s2 = "みずがめ座"; 157 } 158 if (month == 2) { 159 if (month == 2 && day < 19) { 160 System.out.println("あなたは、みずがめ座ですね"); 161 s = 12; 162 s2 = "みずがめ座"; 163 } else 164 System.out.println("あなたは、うお座ですね"); 165 s = 1; 166 s2 = "うお座"; 167 } 168 } catch (Exception e) { 169 // TODO 自動生成された catch ブロック 170 scanner1.nextLine(); 171 System.out.println("数字を入力してください"); 172 } 173 this.uranai(s, s2); 174 }

たとえば
3月11日と入力すると、本来なら
あなたは、うお座ですねと表示され
s = 1、s2 = "うお座"となるはずが、表示はうお座ですねと出るのに変数がデバックの際に確認すると
s = 2、s2 = "おひつじ座"となってしまいます。

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

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

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

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

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

Luice

2022/08/15 03:16

デバッグできるならステップ実行してみれば、どのようなルートを経てs = 2、s2 = "おひつじ座"が設定されるのか理解出来ると思います。
jimbe

2022/08/15 06:11 編集

コンパイル出来るコードをご提示願えますしょうか。 > else文の処理をしないようにしたい 「おひつじ座ですね」の表示は無いのですから、 else の処理はしていません。 >Scanner scanner1 = new Scanner(System.in); >Scanner scanner2 = new Scanner(System.in); 同じ元から複数の Scanner を作成する必要は無く、また危険です。
jirojiro1002

2022/08/15 08:09

>同じ元から複数の Scanner を作成する必要は無く、また危険です。 確かに必要ないと感じました!ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

java

1 if (month == 3 && day < 21) { 2 System.out.println("あなたは、うお座ですね"); 3 s = 1; 4 s2 = "うお座"; 5 } else 6 System.out.println("あなたは、おひつじ座ですね"); 7 s = 2; 8 s2 = "おひつじ座";

このelse節に入っているのは、System.out.println("あなたは、おひつじ座ですね"); だけです。s = 2;s2 = "おひつじ座"; は入っていないので、if の条件が真でも偽でも実行されます。

java

1 } else { 2 System.out.println("あなたは、おひつじ座ですね"); 3 s = 2; 4 s2 = "おひつじ座"; 5 }

としたかったのでしょう。

投稿2022/08/15 03:21

int32_t

総合スコア20884

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

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

jirojiro1002

2022/08/15 07:17

全くもってその通りでした、、、、見落としていましたくだらない質問をしてしまい申し訳ありません。
guest

0

} else

elseの後ろに{}がない場合はどういう動作になるのかよく考えよう

投稿2022/08/15 03:20

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問