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

回答編集履歴

2

Scanner を使うコードを追加

2020/03/12 03:53

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -57,4 +57,35 @@
57
57
  どこが分からないのかを質問してください。
58
58
 
59
59
  **追記**
60
- get の中の retrun '0'; を return tok = '0'; に修正しました。
60
+ get の中の retrun '0'; を return tok = '0'; に修正しました。
61
+
62
+ **追記2**
63
+ 実は Java には Scanner というクラスがあり、区切り文字(デフォルトはスペース)
64
+ で区切られた数字列や文字列を切り出すことができます。
65
+ それを使えば次のようなコードが書けます。
66
+
67
+ ```Java
68
+ import java.util.Scanner;
69
+
70
+ class Main {
71
+ public static void main(String[] args) throws Exception {
72
+ calc("10 + 20");
73
+ calc("10 * 20");
74
+ }
75
+
76
+ static void calc(String str) {
77
+ Scanner s = new Scanner(str);
78
+
79
+ int result = s.nextInt();
80
+ String op = s.next();
81
+ int val = s.nextInt();
82
+
83
+ if (op.equals("+")) result += val;
84
+ else if (op.equals("*")) result *= val;
85
+ else { System.out.println("unknown operator"); return; }
86
+
87
+ System.out.println(result);
88
+ }
89
+ }
90
+ ```
91
+ これなら理解できますか?

1

コードの修正

2020/03/12 03:53

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -22,9 +22,9 @@
22
22
  if ((tok = str.charAt(pos++)) != ' ' ) { // スペース無視
23
23
  if (!Character.isDigit(tok)) return tok;
24
24
  for (val = tok - '0'; ; ) {
25
- if (pos == len) return '0';
25
+ if (pos == len) return tok = '0';
26
26
  tok = str.charAt(pos++);
27
- if (!Character.isDigit(tok)) { pos--; return '0'; }
27
+ if (!Character.isDigit(tok)) { pos--; return tok = '0'; }
28
28
  val = val * 10 + (tok - '0');
29
29
  }
30
30
  }
@@ -54,4 +54,7 @@
54
54
  ```
55
55
  get は、呼び出されるたびに与えられた文字列から数値や演算子を返します。
56
56
 
57
- どこが分からないのかを質問してください。
57
+ どこが分からないのかを質問してください。
58
+
59
+ **追記**
60
+ get の中の retrun '0'; を return tok = '0'; に修正しました。