質問するログイン新規登録

回答編集履歴

2

わかりにくい表現を修正する

2022/03/17 10:04

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -101,7 +101,7 @@
101
101
 
102
102
  ~~…惜しい!!~~(いや惜しくなかったわ)
103
103
 
104
- まず、答えはすでに決まっているはずです。ですが、今回は関係ありませんが、もし問題文と答え・選択肢がファイルから読み込んで出題するとかだとどうでしょうか?
104
+ まず、(プログラムが表示する問題文に対する)答えはすでに決まっているはずです。ですが、今回は関係ありませんが、もし問題文と答え・選択肢がファイルから読み込んで出題するとかだとどうでしょうか?
105
105
  今回は「エ」が正解らしいのでいいですが常にエが正しいとは限りません。ではその場合、どうするか。
106
106
 
107
107
  そう、「実際の答え」用に変数を宣言するのです。

1

追記1

2022/03/17 10:02

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -48,4 +48,162 @@
48
48
 
49
49
  もしこれでもできない場合は**規則性**を見付けることで出来る場合もあります。(今回は不要ですが)
50
50
 
51
- つまり、質問者さんには「**現実世界で考えてみる事**」「**規則性を見付ける事**」「**言い換えてみる事**」、「**プログラミング全体的な発想**」が欠けているだけです。
51
+ つまり、質問者さんには「**現実世界で考えてみる事**」「**規則性を見付ける事**」「**言い換えてみる事**」、「**プログラミング全体的な発想**」が欠けているだけです。
52
+
53
+ ---------------
54
+
55
+ [追記1]
56
+
57
+ 追記読みました。
58
+
59
+ ```Java
60
+ public class Main {
61
+ public static void main(String[] args) {
62
+ //問題を表示
63
+ String q = "問題***";
64
+
65
+ //選択肢を表示
66
+ String choiceA = "ア:***";
67
+ String choiceB = "イ:***";
68
+ String choiceC = "ウ:***;
69
+ String choiceD = "エ:***";
70
+ System.out.println("問題:" + q);
71
+ System.out.println(choiceA);
72
+ System.out.println(choiceB);
73
+ System.out.println(choiceC);
74
+ System.out.println(choiceD);
75
+
76
+
77
+ Scanner scanner = new Scanner (System.in);
78
+
79
+
80
+ while(true) {
81
+ System.out.print("\n回答を入力:");
82
+ String input = scanner.next();
83
+
84
+ if(input.equals("エ")) {
85
+ System.out.println("\n正解!");
86
+ break;
87
+ } else if (input.equals("ア")) {
88
+ System.out.println("\n不正解!\n正解はDです。");
89
+ break;
90
+ } else if (input.equals("イ")) {
91
+ System.out.println("\n不正解!\\n正解はDです。");
92
+ break;
93
+ } else if (input.equals("ウ")) {
94
+ System.out.println("\n不正解!\\n正解はDです。");
95
+ break;
96
+ } System.out.println("\nア~エを入力してください。");
97
+ }
98
+ }
99
+ }
100
+ ```
101
+
102
+ ~~…惜しい!!~~(いや惜しくなかったわ)
103
+
104
+ まず、答えはすでに決まっているはずです。ですが、今回は関係ありませんが、もし問題文と答え・選択肢がファイルから読み込んで出題するとかだとどうでしょうか?
105
+ 今回は「エ」が正解らしいのでいいですが常にエが正しいとは限りません。ではその場合、どうするか。
106
+
107
+ そう、「実際の答え」用に変数を宣言するのです。
108
+
109
+ たとえば string realAnsとしたら、reaAns = "エ" とするとか。
110
+
111
+ で、正解・不正解についても考えてみましょう。
112
+
113
+ ア~エの中から選ぶが、正解はエだとする。そうするとア~ウは不正解、エだけが正解となるはずです。
114
+
115
+ もし正解がウだったらどうでしょうか?
116
+ この場合は**規則性**を見付けるといいです。
117
+
118
+ 正解 = { ウ }
119
+ 不正解 = { ア, イ, エ }
120
+
121
+ となるはずです。これをアが正解のとき、イが正解のとき…と言う風にやってみると、「本来の答えであれば正解、それ以外なら不正解」と言えますね。
122
+ つまり、アのとき~,イのとき~, ... と一つ一つやるのではなく、単純に「ウのときだけ正解で、それ以外は不正解とする」とすればいいだけです。
123
+
124
+ さらに、上でも書いたように「現実世界での手順」なので今回のコードを読んでみましょう。コードを読むコツは「**一行レベルで、その行が何をしているかを考えながら読む**」です。コメントとして読んでいくとか。
125
+
126
+ 実際にやってみましょう。
127
+
128
+ ```Java
129
+ public class Main {
130
+ public static void main(String[] args) {
131
+ //問題文やら選択肢やらを表示する
132
+ String q = "問題***";
133
+ String choiceA = "ア:***";
134
+ String choiceB = "イ:***";
135
+ String choiceC = "ウ:***;
136
+ String choiceD = "エ:***";
137
+ System.out.println("問題:" + q);
138
+ System.out.println(choiceA);
139
+ System.out.println(choiceB);
140
+ System.out.println(choiceC);
141
+ System.out.println(choiceD);
142
+
143
+ // ユーザ入力を標準入力から受け取るためのオブジェクト生成
144
+ Scanner scanner = new Scanner (System.in);
145
+
146
+ // 無限ループ
147
+ while(true) {
148
+ // ユーザ入力を受け付ける
149
+ System.out.print("\n回答を入力:");
150
+ String input = scanner.next();
151
+
152
+ // 「エ」のとき
153
+ if(input.equals("エ")) {
154
+ // 「正解!」
155
+ System.out.println("\n正解!");
156
+            // ループから強制的に抜ける
157
+ break;
158
+ // 「ア」のとき
159
+ } else if (input.equals("ア")) {
160
+ // 「不正解」
161
+ System.out.println("\n不正解!\n正解はDです。");
162
+ // ループから強制的に抜ける
163
+ break;
164
+ // 以下も同じようにやる
165
+ ```
166
+
167
+ これを**疑似コード**として書きだす。
168
+
169
+ ```
170
+ [疑似コード]
171
+ 1. 問題文や選択肢を表示する
172
+ 2. 標準入力用のオブジェクトを生成する(コンソールから読み取るための準備)
173
+ 3. 無限ループ
174
+ 3.1. ユーザ入力を受け付けてinputにセット
175
+ 3.2. inputが「エ」なら
176
+ 3,2,1. 「正解」と表示
177
+ 3.2.2. 無限ループから抜ける
178
+ 3.3. (3.2)を満たさない場合で、inputが「ア」なら
179
+ 3.3.1. 「不正解」系の表示
180
+ 3.3.2. 無限ループから抜ける
181
+ 3.4. (3.3)を満たさない場合で、inputが「イ」なら
182
+ 3.4.1. 「不正解」系の表示
183
+ 3.4.2. 無限ループから抜ける
184
+ 3.5. (3.4)を満たさない場合で、inputが「ウ」なら
185
+ 3.5.1. 「不正解」系の表示
186
+ 3.5.2. 無限ループから抜ける
187
+ 4. 終了
188
+ ```
189
+
190
+ これを実際にデータを入れてみながら考えてみましょう。
191
+
192
+ もしinput = "ア"ならどうでしょうか?
193
+
194
+ (1),(2)は問題ありませんね。(3)で無限ループで(3.1)へ。つまりinoutにデータを入れる所。
195
+ input = "ア"ですね。
196
+
197
+ で、(3.2)で「"ア" == "エ"」ですが成り立ちませんよね。なので(3.3)へ。
198
+ (3.3)では「"ア" == "ア"」なので満たしますから、(3.3.1)へ。
199
+ 不正解と表示して、(3.3.2)へ行く。するとbreak、つまり「ループから強制的に抜ける」ので(3)の後の所に行く。
200
+ つまり(4)へ行ってしまう。
201
+
202
+ えーっと、今回の仕様ってなんでしたっけ?
203
+ 確か「正解になるまで」みたいな感じだったはずです。
204
+
205
+ でもアは本来の答えじゃないのになぜか終了しています。
206
+
207
+ なんかおかしいですよね。
208
+
209
+ こういう風に**実際にデータを入れて考えてみてください**。