質問編集履歴

4

URLが動画になっていたため

2021/06/07 21:40

投稿

Asukaa
Asukaa

スコア1

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  参考にしたサイト
8
8
 
9
- https://www.youtube.com/watch?v=kvz7gLP3SHI&list=PLhg2PHSq8bjisIZGg-cLe4TegqJTCBXhS&index=1
9
+ https://qiita.com/Hori-Masayuki/items/ee14a3964e53b4a8994d
10
10
 
11
11
 
12
12
 

3

参考にしたサイトを追記しました

2021/06/07 21:40

投稿

Asukaa
Asukaa

スコア1

test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,10 @@
4
4
 
5
5
 
6
6
 
7
+ 参考にしたサイト
8
+
9
+ https://www.youtube.com/watch?v=kvz7gLP3SHI&list=PLhg2PHSq8bjisIZGg-cLe4TegqJTCBXhS&index=1
10
+
7
11
 
8
12
 
9
13
  AndroidStudioのJavaで電卓アプリを作成しています。
@@ -56,6 +60,384 @@
56
60
 
57
61
  List<String> nums = Arrays.asList(TextFormula.split("[\+\-×÷]", -1));
58
62
 
63
+
64
+
65
+ // 全て足し算の形に変換 size格納されている要素数
66
+
67
+ for (int i = 0; i < symbols.size(); i++) {
68
+
69
+
70
+
71
+ switch (symbols.get(i)) {
72
+
73
+ case "×":
74
+
75
+ //numsのi番目とi+1番目をかけたものを代入する ex)8*9=0+72 
76
+
77
+ //Double.parseDouble("変換したい文字列")引数で与えた文字列をdouble型に変換するメソッド
78
+
79
+ tmp = Double.parseDouble(nums.get(i)) * Double.parseDouble(nums.get(i + 1));
80
+
81
+ //numsのi番目に0をセット
82
+
83
+ nums.set(i, "0");
84
+
85
+ //numsのi+1番目にさっき計算したものを文字列に変換してセット
86
+
87
+ nums.set(i + 1, String.valueOf(tmp));
88
+
89
+ break;
90
+
91
+
92
+
93
+ case "÷":
94
+
95
+ tmp = Double.parseDouble(nums.get(i)) / Double.parseDouble(nums.get(i + 1));
96
+
97
+ nums.set(i, "0");
98
+
99
+ nums.set(i + 1, String.valueOf(tmp));
100
+
101
+ break;
102
+
103
+
104
+
105
+ case "−":
106
+
107
+ nums.set(i + 1, String.valueOf(Double.parseDouble(nums.get(i + 1)) * -1));
108
+
109
+ break;
110
+
111
+ }
112
+
113
+ }
114
+
115
+ //numsを一つ一つnumで受け取る
116
+
117
+ for (String num : nums) {
118
+
119
+ //numResult
120
+
121
+ numResult += Double.parseDouble(num);
122
+
123
+ }
124
+
125
+ //テキストビューに出力
126
+
127
+ result.setText(String.valueOf(numResult));
128
+
129
+ break;
130
+
131
+ }
132
+
133
+ }
134
+
135
+ }
136
+
137
+ ```
138
+
139
+ ```ここに言語名を入力
140
+
141
+ Java
142
+
143
+ ソースコード
144
+
145
+
146
+
147
+
148
+
149
+ package com.example.calculator;
150
+
151
+
152
+
153
+ import android.os.Bundle;
154
+
155
+ import android.util.Log;
156
+
157
+ import android.view.View;
158
+
159
+ import android.widget.TextView;
160
+
161
+
162
+
163
+ import androidx.appcompat.app.AppCompatActivity;
164
+
165
+
166
+
167
+ import java.util.ArrayList;
168
+
169
+ import java.util.Arrays;
170
+
171
+ import java.util.List;
172
+
173
+
174
+
175
+ public class MainActivity extends AppCompatActivity implements View.OnClickListener {
176
+
177
+
178
+
179
+ TextView formula, result;
180
+
181
+ List<String> symbols;
182
+
183
+
184
+
185
+ @Override
186
+
187
+ protected void onCreate(Bundle savedInstanceState) {
188
+
189
+ super.onCreate(savedInstanceState);
190
+
191
+ setContentView(R.layout.activity_main);
192
+
193
+
194
+
195
+ //これはonCreateの中に書く
196
+
197
+ //数字ボタンを取得
198
+
199
+ findViewById(R.id.number0).setOnClickListener(this);
200
+
201
+ findViewById(R.id.number1).setOnClickListener(this);
202
+
203
+ findViewById(R.id.number2).setOnClickListener(this);
204
+
205
+ findViewById(R.id.number3).setOnClickListener(this);
206
+
207
+ findViewById(R.id.number4).setOnClickListener(this);
208
+
209
+ findViewById(R.id.number5).setOnClickListener(this);
210
+
211
+ findViewById(R.id.number6).setOnClickListener(this);
212
+
213
+ findViewById(R.id.number7).setOnClickListener(this);
214
+
215
+ findViewById(R.id.number8).setOnClickListener(this);
216
+
217
+ findViewById(R.id.number9).setOnClickListener(this);
218
+
219
+ //それ以外のボタンを取得
220
+
221
+ findViewById(R.id.divided).setOnClickListener(this);
222
+
223
+ findViewById(R.id.times).setOnClickListener(this);
224
+
225
+ findViewById(R.id.minus).setOnClickListener(this);
226
+
227
+ findViewById(R.id.plus).setOnClickListener(this);
228
+
229
+ findViewById(R.id.equal).setOnClickListener(this);
230
+
231
+ findViewById(R.id.wasa).setOnClickListener(this);
232
+
233
+ findViewById(R.id.clear).setOnClickListener(this);
234
+
235
+ }
236
+
237
+
238
+
239
+ @Override
240
+
241
+ public void onClick(View v) {
242
+
243
+ //電卓の処理
244
+
245
+
246
+
247
+ //メッセージを表示するtextViewオブジェクトを取得
248
+
249
+ TextView formula = findViewById(R.id.formula);
250
+
251
+ TextView result = findViewById(R.id.result);
252
+
253
+
254
+
255
+ //String型でArrayListを宣言
256
+
257
+ ArrayList<String> symbols = new ArrayList<String>();
258
+
259
+
260
+
261
+ //タップされた画面部品のidの値を取得
262
+
263
+ //idのR値に応じて処理を分岐
264
+
265
+ int id = v.getId();
266
+
267
+
268
+
269
+ //押されたボタンごとに処理を分岐
270
+
271
+ switch (id) {
272
+
273
+ case R.id.number0:
274
+
275
+ //途中式を取得して途中式に押されたものを追加
276
+
277
+ formula.setText(formula.getText().toString() + "0");
278
+
279
+ break;
280
+
281
+
282
+
283
+ case R.id.number1:
284
+
285
+ formula.setText(formula.getText().toString() + "1");
286
+
287
+ break;
288
+
289
+
290
+
291
+ case R.id.number2:
292
+
293
+ formula.setText(formula.getText().toString() + "2");
294
+
295
+ break;
296
+
297
+
298
+
299
+ case R.id.number3:
300
+
301
+ formula.setText(formula.getText().toString() + "3");
302
+
303
+ break;
304
+
305
+
306
+
307
+ case R.id.number4:
308
+
309
+ formula.setText(formula.getText().toString() + "4");
310
+
311
+ break;
312
+
313
+
314
+
315
+ case R.id.number5:
316
+
317
+ formula.setText(formula.getText().toString() + "5");
318
+
319
+ break;
320
+
321
+
322
+
323
+ case R.id.number6:
324
+
325
+ formula.setText(formula.getText().toString() + "6");
326
+
327
+ break;
328
+
329
+
330
+
331
+ case R.id.number7:
332
+
333
+ formula.setText(formula.getText().toString() + "7");
334
+
335
+ break;
336
+
337
+
338
+
339
+ case R.id.number8:
340
+
341
+ formula.setText(formula.getText().toString() + "8");
342
+
343
+ break;
344
+
345
+
346
+
347
+ case R.id.number9:
348
+
349
+ formula.setText(formula.getText().toString() + "9");
350
+
351
+ break;
352
+
353
+
354
+
355
+ case R.id.plus:
356
+
357
+ //足し算
358
+
359
+ formula.setText(formula.getText().toString() + "+");
360
+
361
+ //リストの最後に要素を追加
362
+
363
+ symbols.add("+");
364
+
365
+ break;
366
+
367
+
368
+
369
+ case R.id.minus:
370
+
371
+ //引き算
372
+
373
+ formula.setText(formula.getText().toString() + "−");
374
+
375
+ symbols.add("−");
376
+
377
+ break;
378
+
379
+
380
+
381
+ case R.id.divided:
382
+
383
+ //割り算
384
+
385
+ formula.setText(formula.getText().toString() + "÷");
386
+
387
+ symbols.add("÷");
388
+
389
+ break;
390
+
391
+
392
+
393
+ case R.id.times:
394
+
395
+ //掛け算
396
+
397
+ formula.setText(formula.getText().toString() + "×");
398
+
399
+ symbols.add("×");
400
+
401
+ break;
402
+
403
+
404
+
405
+ case R.id.wasa:
406
+
407
+ //+-を変更する
408
+
409
+
410
+
411
+ case R.id.clear:
412
+
413
+ //結果表示画面をクリアにする
414
+
415
+ formula.setText("");
416
+
417
+ result.setText("");
418
+
419
+ symbols.clear();
420
+
421
+ break;
422
+
423
+
424
+
425
+ case R.id.equal:
426
+
427
+ double tmp;
428
+
429
+ double numResult = 0;
430
+
431
+ //最終的な計算結果を取得する
432
+
433
+ //まず文字列にして取得
434
+
435
+ String TextFormula = formula.getText().toString();
436
+
437
+ //数値がリストに入っていく
438
+
439
+ List<String> nums = Arrays.asList(TextFormula.split("[\+\-×÷]", -1));
440
+
59
441
 
60
442
 
61
443
  //例外が起きそうなところをtryでかこむ
@@ -154,408 +536,8 @@
154
536
 
155
537
  ```
156
538
 
157
- ```ここに言語名を入力
158
-
159
- Java
160
-
161
- ソースコード
162
-
163
-
164
-
165
-
166
-
167
- package com.example.calculator;
168
-
169
-
170
-
171
- import android.os.Bundle;
172
-
173
- import android.util.Log;
174
-
175
- import android.view.View;
176
-
177
- import android.widget.TextView;
178
-
179
-
180
-
181
- import androidx.appcompat.app.AppCompatActivity;
182
-
183
-
184
-
185
- import java.util.ArrayList;
186
-
187
- import java.util.Arrays;
188
-
189
- import java.util.List;
190
-
191
-
192
-
193
- public class MainActivity extends AppCompatActivity implements View.OnClickListener {
194
-
195
-
196
-
197
- TextView formula, result;
198
-
199
- List<String> symbols;
200
-
201
-
202
-
203
- @Override
204
-
205
- protected void onCreate(Bundle savedInstanceState) {
206
-
207
- super.onCreate(savedInstanceState);
208
-
209
- setContentView(R.layout.activity_main);
210
-
211
-
212
-
213
- //これはonCreateの中に書く
214
-
215
- //数字ボタンを取得
216
-
217
- findViewById(R.id.number0).setOnClickListener(this);
218
-
219
- findViewById(R.id.number1).setOnClickListener(this);
220
-
221
- findViewById(R.id.number2).setOnClickListener(this);
222
-
223
- findViewById(R.id.number3).setOnClickListener(this);
224
-
225
- findViewById(R.id.number4).setOnClickListener(this);
226
-
227
- findViewById(R.id.number5).setOnClickListener(this);
228
-
229
- findViewById(R.id.number6).setOnClickListener(this);
230
-
231
- findViewById(R.id.number7).setOnClickListener(this);
232
-
233
- findViewById(R.id.number8).setOnClickListener(this);
234
-
235
- findViewById(R.id.number9).setOnClickListener(this);
236
-
237
- //それ以外のボタンを取得
238
-
239
- findViewById(R.id.divided).setOnClickListener(this);
240
-
241
- findViewById(R.id.times).setOnClickListener(this);
242
-
243
- findViewById(R.id.minus).setOnClickListener(this);
244
-
245
- findViewById(R.id.plus).setOnClickListener(this);
246
-
247
- findViewById(R.id.equal).setOnClickListener(this);
248
-
249
- findViewById(R.id.wasa).setOnClickListener(this);
250
-
251
- findViewById(R.id.clear).setOnClickListener(this);
252
-
253
- }
254
-
255
-
256
-
257
- @Override
258
-
259
- public void onClick(View v) {
260
-
261
- //電卓の処理
262
-
263
-
264
-
265
- //メッセージを表示するtextViewオブジェクトを取得
266
-
267
- TextView formula = findViewById(R.id.formula);
268
-
269
- TextView result = findViewById(R.id.result);
270
-
271
-
272
-
273
- //String型でArrayListを宣言
274
-
275
- ArrayList<String> symbols = new ArrayList<String>();
276
-
277
-
278
-
279
- //タップされた画面部品のidの値を取得
280
-
281
- //idのR値に応じて処理を分岐
282
-
283
- int id = v.getId();
284
-
285
-
286
-
287
- //押されたボタンごとに処理を分岐
288
-
289
- switch (id) {
290
-
291
- case R.id.number0:
292
-
293
- //途中式を取得して途中式に押されたものを追加
294
-
295
- formula.setText(formula.getText().toString() + "0");
296
-
297
- break;
298
-
299
-
300
-
301
- case R.id.number1:
302
-
303
- formula.setText(formula.getText().toString() + "1");
304
-
305
- break;
306
-
307
-
308
-
309
- case R.id.number2:
310
-
311
- formula.setText(formula.getText().toString() + "2");
312
-
313
- break;
314
-
315
-
316
-
317
- case R.id.number3:
318
-
319
- formula.setText(formula.getText().toString() + "3");
320
-
321
- break;
322
-
323
-
324
-
325
- case R.id.number4:
326
-
327
- formula.setText(formula.getText().toString() + "4");
328
-
329
- break;
330
-
331
-
332
-
333
- case R.id.number5:
334
-
335
- formula.setText(formula.getText().toString() + "5");
336
-
337
- break;
338
-
339
-
340
-
341
- case R.id.number6:
342
-
343
- formula.setText(formula.getText().toString() + "6");
344
-
345
- break;
346
-
347
-
348
-
349
- case R.id.number7:
350
-
351
- formula.setText(formula.getText().toString() + "7");
352
-
353
- break;
354
-
355
-
356
-
357
- case R.id.number8:
358
-
359
- formula.setText(formula.getText().toString() + "8");
360
-
361
- break;
362
-
363
-
364
-
365
- case R.id.number9:
366
-
367
- formula.setText(formula.getText().toString() + "9");
368
-
369
- break;
370
-
371
-
372
-
373
- case R.id.plus:
374
-
375
- //足し算
376
-
377
- formula.setText(formula.getText().toString() + "+");
378
-
379
- //リストの最後に要素を追加
380
-
381
- symbols.add("+");
382
-
383
- break;
384
-
385
-
386
-
387
- case R.id.minus:
388
-
389
- //引き算
390
-
391
- formula.setText(formula.getText().toString() + "−");
392
-
393
- symbols.add("−");
394
-
395
- break;
396
-
397
-
398
-
399
- case R.id.divided:
400
-
401
- //割り算
402
-
403
- formula.setText(formula.getText().toString() + "÷");
404
-
405
- symbols.add("÷");
406
-
407
- break;
408
-
409
-
410
-
411
- case R.id.times:
412
-
413
- //掛け算
414
-
415
- formula.setText(formula.getText().toString() + "×");
416
-
417
- symbols.add("×");
418
-
419
- break;
420
-
421
-
422
-
423
- case R.id.wasa:
424
-
425
- //+-を変更する
426
-
427
-
428
-
429
- case R.id.clear:
430
-
431
- //結果表示画面をクリアにする
432
-
433
- formula.setText("");
434
-
435
- result.setText("");
436
-
437
- symbols.clear();
438
-
439
- break;
440
-
441
-
442
-
443
- case R.id.equal:
444
-
445
- double tmp;
446
-
447
- double numResult = 0;
448
-
449
- //最終的な計算結果を取得する
450
-
451
- //まず文字列にして取得
452
-
453
- String TextFormula = formula.getText().toString();
454
-
455
- //数値がリストに入っていく
456
-
457
- List<String> nums = Arrays.asList(TextFormula.split("[\+\-×÷]", -1));
458
-
459
-
460
-
461
- //例外が起きそうなところをtryでかこむ
462
-
463
- try {
464
-
465
- /* //-5-5ができるようにする numsに設定されていた空白に0をセットしてあげる
466
-
467
- if ((nums.get(0).length() == 0) && (symbols.get(0) == "-")) {
468
-
469
- nums.set(0, "0");
470
-
471
- }*/
472
-
473
-
474
-
475
- // 全て足し算の形に変換 size格納されている要素数
476
-
477
- for (int i = 0; i < symbols.size(); i++) {
478
-
479
-
480
-
481
- switch (symbols.get(i)) {
482
-
483
- case "×":
484
-
485
- //numsのi番目とi+1番目をかけたものを代入する ex)8*9=0+72 
486
-
487
- //Double.parseDouble("変換したい文字列")引数で与えた文字列をdouble型に変換するメソッド
488
-
489
- tmp = Double.parseDouble(nums.get(i)) * Double.parseDouble(nums.get(i + 1));
490
-
491
- //numsのi番目に0をセット
492
-
493
- nums.set(i, "0");
494
-
495
- //numsのi+1番目にさっき計算したものを文字列に変換してセット
496
-
497
- nums.set(i + 1, String.valueOf(tmp));
498
-
499
- break;
500
-
501
-
502
-
503
- case "÷":
504
-
505
- tmp = Double.parseDouble(nums.get(i)) / Double.parseDouble(nums.get(i + 1));
506
-
507
- nums.set(i, "0");
508
-
509
- nums.set(i + 1, String.valueOf(tmp));
510
-
511
- break;
512
-
513
-
514
-
515
- case "−":
516
-
517
- nums.set(i + 1, String.valueOf(Double.parseDouble(nums.get(i + 1)) * -1));
518
-
519
- break;
520
-
521
- }
522
-
523
- }
524
-
525
- //numsを一つ一つnumで受け取る
526
-
527
- for (String num : nums) {
528
-
529
- //numResult
530
-
531
- numResult += Double.parseDouble(num);
532
-
533
- }
534
-
535
- //テキストビューに出力
536
-
537
- result.setText(String.valueOf(numResult));
538
-
539
- //tryの続き
540
-
541
- } catch (Exception e) {
542
-
543
- Log.e("エラー", e.getMessage());
544
-
545
- }
546
-
547
- break;
548
-
549
- }
550
-
551
- }
552
-
553
- }
554
-
555
539
  ```
556
540
 
557
- ```
558
-
559
541
 
560
542
 
561
543
 

2

変更できていなかったためです

2021/06/07 21:38

投稿

Asukaa
Asukaa

スコア1

test CHANGED
File without changes
test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  ### 該当のソースコード
36
36
 
37
- イコールのボタンを押した後に処理される部分です。
37
+ イコールのボタンを押した後に処理される部分です。
38
38
 
39
39
 
40
40
 
@@ -162,7 +162,7 @@
162
162
 
163
163
 
164
164
 
165
- ```ここに言語を入力
165
+
166
166
 
167
167
  package com.example.calculator;
168
168
 
@@ -554,6 +554,8 @@
554
554
 
555
555
  ```
556
556
 
557
+ ```
558
+
557
559
 
558
560
 
559
561
 

1

ご指摘を受けて、code機能に変更してみました。

2021/06/07 21:35

投稿

Asukaa
Asukaa

スコア1

test CHANGED
File without changes
test CHANGED
@@ -38,7 +38,9 @@
38
38
 
39
39
 
40
40
 
41
+ ```ここに言語を入力
42
+
41
- case R.id.equal:
43
+ case R.id.equal:
42
44
 
43
45
  double tmp;
44
46
 
@@ -150,401 +152,409 @@
150
152
 
151
153
  }
152
154
 
155
+ ```
156
+
153
157
  ```ここに言語名を入力
154
158
 
155
159
  Java
156
160
 
157
161
  ソースコード
158
162
 
163
+
164
+
165
+ ```ここに言語を入力
166
+
167
+ package com.example.calculator;
168
+
169
+
170
+
171
+ import android.os.Bundle;
172
+
173
+ import android.util.Log;
174
+
175
+ import android.view.View;
176
+
177
+ import android.widget.TextView;
178
+
179
+
180
+
181
+ import androidx.appcompat.app.AppCompatActivity;
182
+
183
+
184
+
185
+ import java.util.ArrayList;
186
+
187
+ import java.util.Arrays;
188
+
189
+ import java.util.List;
190
+
191
+
192
+
193
+ public class MainActivity extends AppCompatActivity implements View.OnClickListener {
194
+
195
+
196
+
197
+ TextView formula, result;
198
+
199
+ List<String> symbols;
200
+
201
+
202
+
203
+ @Override
204
+
205
+ protected void onCreate(Bundle savedInstanceState) {
206
+
207
+ super.onCreate(savedInstanceState);
208
+
209
+ setContentView(R.layout.activity_main);
210
+
211
+
212
+
213
+ //これはonCreateの中に書く
214
+
215
+ //数字ボタンを取得
216
+
217
+ findViewById(R.id.number0).setOnClickListener(this);
218
+
219
+ findViewById(R.id.number1).setOnClickListener(this);
220
+
221
+ findViewById(R.id.number2).setOnClickListener(this);
222
+
223
+ findViewById(R.id.number3).setOnClickListener(this);
224
+
225
+ findViewById(R.id.number4).setOnClickListener(this);
226
+
227
+ findViewById(R.id.number5).setOnClickListener(this);
228
+
229
+ findViewById(R.id.number6).setOnClickListener(this);
230
+
231
+ findViewById(R.id.number7).setOnClickListener(this);
232
+
233
+ findViewById(R.id.number8).setOnClickListener(this);
234
+
235
+ findViewById(R.id.number9).setOnClickListener(this);
236
+
237
+ //それ以外のボタンを取得
238
+
239
+ findViewById(R.id.divided).setOnClickListener(this);
240
+
241
+ findViewById(R.id.times).setOnClickListener(this);
242
+
243
+ findViewById(R.id.minus).setOnClickListener(this);
244
+
245
+ findViewById(R.id.plus).setOnClickListener(this);
246
+
247
+ findViewById(R.id.equal).setOnClickListener(this);
248
+
249
+ findViewById(R.id.wasa).setOnClickListener(this);
250
+
251
+ findViewById(R.id.clear).setOnClickListener(this);
252
+
253
+ }
254
+
255
+
256
+
257
+ @Override
258
+
259
+ public void onClick(View v) {
260
+
261
+ //電卓の処理
262
+
263
+
264
+
265
+ //メッセージを表示するtextViewオブジェクトを取得
266
+
267
+ TextView formula = findViewById(R.id.formula);
268
+
269
+ TextView result = findViewById(R.id.result);
270
+
271
+
272
+
273
+ //String型でArrayListを宣言
274
+
275
+ ArrayList<String> symbols = new ArrayList<String>();
276
+
277
+
278
+
279
+ //タップされた画面部品のidの値を取得
280
+
281
+ //idのR値に応じて処理を分岐
282
+
283
+ int id = v.getId();
284
+
285
+
286
+
287
+ //押されたボタンごとに処理を分岐
288
+
289
+ switch (id) {
290
+
291
+ case R.id.number0:
292
+
293
+ //途中式を取得して途中式に押されたものを追加
294
+
295
+ formula.setText(formula.getText().toString() + "0");
296
+
297
+ break;
298
+
299
+
300
+
301
+ case R.id.number1:
302
+
303
+ formula.setText(formula.getText().toString() + "1");
304
+
305
+ break;
306
+
307
+
308
+
309
+ case R.id.number2:
310
+
311
+ formula.setText(formula.getText().toString() + "2");
312
+
313
+ break;
314
+
315
+
316
+
317
+ case R.id.number3:
318
+
319
+ formula.setText(formula.getText().toString() + "3");
320
+
321
+ break;
322
+
323
+
324
+
325
+ case R.id.number4:
326
+
327
+ formula.setText(formula.getText().toString() + "4");
328
+
329
+ break;
330
+
331
+
332
+
333
+ case R.id.number5:
334
+
335
+ formula.setText(formula.getText().toString() + "5");
336
+
337
+ break;
338
+
339
+
340
+
341
+ case R.id.number6:
342
+
343
+ formula.setText(formula.getText().toString() + "6");
344
+
345
+ break;
346
+
347
+
348
+
349
+ case R.id.number7:
350
+
351
+ formula.setText(formula.getText().toString() + "7");
352
+
353
+ break;
354
+
355
+
356
+
357
+ case R.id.number8:
358
+
359
+ formula.setText(formula.getText().toString() + "8");
360
+
361
+ break;
362
+
363
+
364
+
365
+ case R.id.number9:
366
+
367
+ formula.setText(formula.getText().toString() + "9");
368
+
369
+ break;
370
+
371
+
372
+
373
+ case R.id.plus:
374
+
375
+ //足し算
376
+
377
+ formula.setText(formula.getText().toString() + "+");
378
+
379
+ //リストの最後に要素を追加
380
+
381
+ symbols.add("+");
382
+
383
+ break;
384
+
385
+
386
+
387
+ case R.id.minus:
388
+
389
+ //引き算
390
+
391
+ formula.setText(formula.getText().toString() + "−");
392
+
393
+ symbols.add("−");
394
+
395
+ break;
396
+
397
+
398
+
399
+ case R.id.divided:
400
+
401
+ //割り算
402
+
403
+ formula.setText(formula.getText().toString() + "÷");
404
+
405
+ symbols.add("÷");
406
+
407
+ break;
408
+
409
+
410
+
411
+ case R.id.times:
412
+
413
+ //掛け算
414
+
415
+ formula.setText(formula.getText().toString() + "×");
416
+
417
+ symbols.add("×");
418
+
419
+ break;
420
+
421
+
422
+
423
+ case R.id.wasa:
424
+
425
+ //+-を変更する
426
+
427
+
428
+
429
+ case R.id.clear:
430
+
431
+ //結果表示画面をクリアにする
432
+
433
+ formula.setText("");
434
+
435
+ result.setText("");
436
+
437
+ symbols.clear();
438
+
439
+ break;
440
+
441
+
442
+
443
+ case R.id.equal:
444
+
445
+ double tmp;
446
+
447
+ double numResult = 0;
448
+
449
+ //最終的な計算結果を取得する
450
+
451
+ //まず文字列にして取得
452
+
453
+ String TextFormula = formula.getText().toString();
454
+
455
+ //数値がリストに入っていく
456
+
457
+ List<String> nums = Arrays.asList(TextFormula.split("[\+\-×÷]", -1));
458
+
459
+
460
+
461
+ //例外が起きそうなところをtryでかこむ
462
+
463
+ try {
464
+
465
+ /* //-5-5ができるようにする numsに設定されていた空白に0をセットしてあげる
466
+
467
+ if ((nums.get(0).length() == 0) && (symbols.get(0) == "-")) {
468
+
469
+ nums.set(0, "0");
470
+
471
+ }*/
472
+
473
+
474
+
475
+ // 全て足し算の形に変換 size格納されている要素数
476
+
477
+ for (int i = 0; i < symbols.size(); i++) {
478
+
479
+
480
+
481
+ switch (symbols.get(i)) {
482
+
483
+ case "×":
484
+
485
+ //numsのi番目とi+1番目をかけたものを代入する ex)8*9=0+72 
486
+
487
+ //Double.parseDouble("変換したい文字列")引数で与えた文字列をdouble型に変換するメソッド
488
+
489
+ tmp = Double.parseDouble(nums.get(i)) * Double.parseDouble(nums.get(i + 1));
490
+
491
+ //numsのi番目に0をセット
492
+
493
+ nums.set(i, "0");
494
+
495
+ //numsのi+1番目にさっき計算したものを文字列に変換してセット
496
+
497
+ nums.set(i + 1, String.valueOf(tmp));
498
+
499
+ break;
500
+
501
+
502
+
503
+ case "÷":
504
+
505
+ tmp = Double.parseDouble(nums.get(i)) / Double.parseDouble(nums.get(i + 1));
506
+
507
+ nums.set(i, "0");
508
+
509
+ nums.set(i + 1, String.valueOf(tmp));
510
+
511
+ break;
512
+
513
+
514
+
515
+ case "−":
516
+
517
+ nums.set(i + 1, String.valueOf(Double.parseDouble(nums.get(i + 1)) * -1));
518
+
519
+ break;
520
+
521
+ }
522
+
523
+ }
524
+
525
+ //numsを一つ一つnumで受け取る
526
+
527
+ for (String num : nums) {
528
+
529
+ //numResult
530
+
531
+ numResult += Double.parseDouble(num);
532
+
533
+ }
534
+
535
+ //テキストビューに出力
536
+
537
+ result.setText(String.valueOf(numResult));
538
+
539
+ //tryの続き
540
+
541
+ } catch (Exception e) {
542
+
543
+ Log.e("エラー", e.getMessage());
544
+
545
+ }
546
+
547
+ break;
548
+
549
+ }
550
+
551
+ }
552
+
553
+ }
554
+
159
555
  ```
160
556
 
161
- package com.example.calculator;
557
+
162
-
163
-
164
-
165
- import android.os.Bundle;
166
-
167
- import android.util.Log;
168
-
169
- import android.view.View;
170
-
171
- import android.widget.TextView;
172
-
173
-
174
-
175
- import androidx.appcompat.app.AppCompatActivity;
176
-
177
-
178
-
179
- import java.util.ArrayList;
180
-
181
- import java.util.Arrays;
182
-
183
- import java.util.List;
184
-
185
-
186
-
187
- public class MainActivity extends AppCompatActivity implements View.OnClickListener {
188
-
189
-
190
-
191
- TextView formula, result;
192
-
193
- List<String> symbols;
194
-
195
-
196
-
197
- @Override
198
-
199
- protected void onCreate(Bundle savedInstanceState) {
200
-
201
- super.onCreate(savedInstanceState);
202
-
203
- setContentView(R.layout.activity_main);
204
-
205
-
206
-
207
- //これはonCreateの中に書く
208
-
209
- //数字ボタンを取得
210
-
211
- findViewById(R.id.number0).setOnClickListener(this);
212
-
213
- findViewById(R.id.number1).setOnClickListener(this);
214
-
215
- findViewById(R.id.number2).setOnClickListener(this);
216
-
217
- findViewById(R.id.number3).setOnClickListener(this);
218
-
219
- findViewById(R.id.number4).setOnClickListener(this);
220
-
221
- findViewById(R.id.number5).setOnClickListener(this);
222
-
223
- findViewById(R.id.number6).setOnClickListener(this);
224
-
225
- findViewById(R.id.number7).setOnClickListener(this);
226
-
227
- findViewById(R.id.number8).setOnClickListener(this);
228
-
229
- findViewById(R.id.number9).setOnClickListener(this);
230
-
231
- //それ以外のボタンを取得
232
-
233
- findViewById(R.id.divided).setOnClickListener(this);
234
-
235
- findViewById(R.id.times).setOnClickListener(this);
236
-
237
- findViewById(R.id.minus).setOnClickListener(this);
238
-
239
- findViewById(R.id.plus).setOnClickListener(this);
240
-
241
- findViewById(R.id.equal).setOnClickListener(this);
242
-
243
- findViewById(R.id.wasa).setOnClickListener(this);
244
-
245
- findViewById(R.id.clear).setOnClickListener(this);
246
-
247
- }
248
-
249
-
250
-
251
- @Override
252
-
253
- public void onClick(View v) {
254
-
255
- //電卓の処理
256
-
257
-
258
-
259
- //メッセージを表示するtextViewオブジェクトを取得
260
-
261
- TextView formula = findViewById(R.id.formula);
262
-
263
- TextView result = findViewById(R.id.result);
264
-
265
-
266
-
267
- //String型でArrayListを宣言
268
-
269
- ArrayList<String> symbols = new ArrayList<String>();
270
-
271
-
272
-
273
- //タップされた画面部品のidの値を取得
274
-
275
- //idのR値に応じて処理を分岐
276
-
277
- int id = v.getId();
278
-
279
-
280
-
281
- //押されたボタンごとに処理を分岐
282
-
283
- switch (id) {
284
-
285
- case R.id.number0:
286
-
287
- //途中式を取得して途中式に押されたものを追加
288
-
289
- formula.setText(formula.getText().toString() + "0");
290
-
291
- break;
292
-
293
-
294
-
295
- case R.id.number1:
296
-
297
- formula.setText(formula.getText().toString() + "1");
298
-
299
- break;
300
-
301
-
302
-
303
- case R.id.number2:
304
-
305
- formula.setText(formula.getText().toString() + "2");
306
-
307
- break;
308
-
309
-
310
-
311
- case R.id.number3:
312
-
313
- formula.setText(formula.getText().toString() + "3");
314
-
315
- break;
316
-
317
-
318
-
319
- case R.id.number4:
320
-
321
- formula.setText(formula.getText().toString() + "4");
322
-
323
- break;
324
-
325
-
326
-
327
- case R.id.number5:
328
-
329
- formula.setText(formula.getText().toString() + "5");
330
-
331
- break;
332
-
333
-
334
-
335
- case R.id.number6:
336
-
337
- formula.setText(formula.getText().toString() + "6");
338
-
339
- break;
340
-
341
-
342
-
343
- case R.id.number7:
344
-
345
- formula.setText(formula.getText().toString() + "7");
346
-
347
- break;
348
-
349
-
350
-
351
- case R.id.number8:
352
-
353
- formula.setText(formula.getText().toString() + "8");
354
-
355
- break;
356
-
357
-
358
-
359
- case R.id.number9:
360
-
361
- formula.setText(formula.getText().toString() + "9");
362
-
363
- break;
364
-
365
-
366
-
367
- case R.id.plus:
368
-
369
- //足し算
370
-
371
- formula.setText(formula.getText().toString() + "+");
372
-
373
- //リストの最後に要素を追加
374
-
375
- symbols.add("+");
376
-
377
- break;
378
-
379
-
380
-
381
- case R.id.minus:
382
-
383
- //引き算
384
-
385
- formula.setText(formula.getText().toString() + "−");
386
-
387
- symbols.add("−");
388
-
389
- break;
390
-
391
-
392
-
393
- case R.id.divided:
394
-
395
- //割り算
396
-
397
- formula.setText(formula.getText().toString() + "÷");
398
-
399
- symbols.add("÷");
400
-
401
- break;
402
-
403
-
404
-
405
- case R.id.times:
406
-
407
- //掛け算
408
-
409
- formula.setText(formula.getText().toString() + "×");
410
-
411
- symbols.add("×");
412
-
413
- break;
414
-
415
-
416
-
417
- case R.id.wasa:
418
-
419
- //+-を変更する
420
-
421
-
422
-
423
- case R.id.clear:
424
-
425
- //結果表示画面をクリアにする
426
-
427
- formula.setText("");
428
-
429
- result.setText("");
430
-
431
- symbols.clear();
432
-
433
- break;
434
-
435
-
436
-
437
- case R.id.equal:
438
-
439
- double tmp;
440
-
441
- double numResult = 0;
442
-
443
- //最終的な計算結果を取得する
444
-
445
- //まず文字列にして取得
446
-
447
- String TextFormula = formula.getText().toString();
448
-
449
- //数値がリストに入っていく
450
-
451
- List<String> nums = Arrays.asList(TextFormula.split("[\+\-×÷]", -1));
452
-
453
-
454
-
455
- //例外が起きそうなところをtryでかこむ
456
-
457
- try {
458
-
459
- /* //-5-5ができるようにする numsに設定されていた空白に0をセットしてあげる
460
-
461
- if ((nums.get(0).length() == 0) && (symbols.get(0) == "-")) {
462
-
463
- nums.set(0, "0");
464
-
465
- }*/
466
-
467
-
468
-
469
- // 全て足し算の形に変換 size格納されている要素数
470
-
471
- for (int i = 0; i < symbols.size(); i++) {
472
-
473
-
474
-
475
- switch (symbols.get(i)) {
476
-
477
- case "×":
478
-
479
- //numsのi番目とi+1番目をかけたものを代入する ex)8*9=0+72 
480
-
481
- //Double.parseDouble("変換したい文字列")引数で与えた文字列をdouble型に変換するメソッド
482
-
483
- tmp = Double.parseDouble(nums.get(i)) * Double.parseDouble(nums.get(i + 1));
484
-
485
- //numsのi番目に0をセット
486
-
487
- nums.set(i, "0");
488
-
489
- //numsのi+1番目にさっき計算したものを文字列に変換してセット
490
-
491
- nums.set(i + 1, String.valueOf(tmp));
492
-
493
- break;
494
-
495
-
496
-
497
- case "÷":
498
-
499
- tmp = Double.parseDouble(nums.get(i)) / Double.parseDouble(nums.get(i + 1));
500
-
501
- nums.set(i, "0");
502
-
503
- nums.set(i + 1, String.valueOf(tmp));
504
-
505
- break;
506
-
507
-
508
-
509
- case "−":
510
-
511
- nums.set(i + 1, String.valueOf(Double.parseDouble(nums.get(i + 1)) * -1));
512
-
513
- break;
514
-
515
- }
516
-
517
- }
518
-
519
- //numsを一つ一つnumで受け取る
520
-
521
- for (String num : nums) {
522
-
523
- //numResult
524
-
525
- numResult += Double.parseDouble(num);
526
-
527
- }
528
-
529
- //テキストビューに出力
530
-
531
- result.setText(String.valueOf(numResult));
532
-
533
- //tryの続き
534
-
535
- } catch (Exception e) {
536
-
537
- Log.e("エラー", e.getMessage());
538
-
539
- }
540
-
541
- break;
542
-
543
- }
544
-
545
- }
546
-
547
- }
548
558
 
549
559
 
550
560