LoginSignup
1
0

More than 3 years have passed since last update.

備忘録No.6「文字列として受け取った1桁の和差の式を計算する」[Java]

Last updated at Posted at 2020-11-16

はじめに

初めて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] == '+';
1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0