はじめに
初めてgetNumericValueメソッドを使用したので、記録。
やりたい事
・長さ自由の文字列で計算式を受け取る(使われる数字は全て1桁、演算子は'+'と'-'のみ)
・受け取った文字列を数値にして計算
・計算結果を出力する
(例)
入力:"1+2+3"
出力:6
コード
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
sc.close();
char [] c = line.toCharArray();
int sum = 0;
boolean add = true;
for(int i = 0; i < line.length(); i++) {
if(i % 2 == 0) {//数値と演算子が交互に来るため、偶数は数値の計算,奇数は演算子の入れ替えを行う
if(add) {
int n = c[i];
sum += n;
} else {
int n = c[i];
sum -= n;
}
} else {
if(c[i] == '+') {
add = true;
} else {
add = false;
}
}
}
System.out.println(sum);
入力:"1+2+3"
出力:150
コード1の問題点
・char型の配列に入れられた数値をint型にした際に、ASCII文字コードで代入されてしまっている。→ 配列に入っている数値の見た目そのままで取り出したい!
改善したコード
if(add) {
int n = Character.getNumericValue(c[i]);
sum += n;
} else {
int n = Character.getNumericValue(c[i]);
sum -= n;
}
入力:"1+2+3"
出力:6
まとめ
char型の数値をそのまま使いたい時には、Character型のgetNumericValue()を使う。
追記
省略前
if(c[i] == '+') {
add = true;
} else {
add = false;
}
上記の部分では、比較演算子はboolean型を返すので、addに直接代入することで、真偽判定ができる。
省略後
add = c[i] == '+';