LoginSignup
shun03
@shun03

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Javaの計算について

解決したいこと

ここに解決したい内容を記載してください。
Javaで、以下の様な2つのクラスで各計算のメソッドが書かれておりますが、
どの様に処理が働いて計算されているかが理解できません。
よろしければ解説をお願いします。
※スマホからの記載なので、ソースのズレはご容赦ください。

Calc.java


public class Calc {

    private double total;
    public Calc () {
        init();
    }

        public void add(int operand1,int operand2) {
            total = operand1 + operand2;
        }   
        public void sub(int operand1,int operand2) {
            total = operand1 - operand2;
        }
        public void multi(int operand1,int operand2) {
            total = operand1 * operand2;
        }       
        public void div(int operand1,int operand2) {
            total = operand1 / operand2;
        }         
        public void mod(int operand1,int operand2) {
            total = operand1 % operand2;
        }       
        public void pow(int operand1,int operand2) {
            int total = 1;
            for (int i = 0; i < operand2; i++) {
                total = total * operand1;

public double getTotal() {
    return total;
 }

public void init() {
     total = 0;
 }

Main.java

public class Main {


    public static void main(String[]args) {

        Calc c = new Calc();
    try {

        int operand1 = Integer.parseInt(args[0]);
        String operator = args[1];
        int operand2 = Integer.parseInt(args[2]);
        boolean errflg = true;

        switch(operator) {
        case "+":
            c.add(operand1,operand2);
            break;
        case "-":
            c.sub(operand1,operand2);
            break;
        case "*":
            c.multi(operand1,operand2);
            break;
        case "/":
            c.div(operand1,operand2);
            break;
        case "%":
            c.mod(operand1,operand2);
            break;

        case "^":
            c.pow(operand1,operand2);
            break;
        }
                default:
System.out.println("演算子がありません");
                        errFlg = false;
                        break;

        BigDecimal total = BigDecimal.valueOf(c.getTotal());
        if(total.scale() == 0) {
            DecimalFormat format = new DecimalFormat("#.0");
            System.out.println(operand1 + "" + operator + "" + operand2 + "=" + format.format(total));
        } else {
            System.out.println(operand1 + operator + operand2 + "=" + total.toPlainString());
        }

    }catch(NumberFormatException e) {
            System.out.println("入力値が正しくありません");
        }
    }
}

0

1Answer

簡単に言うと標準入力(キーボード入力)からメインメソッドのコマンドライン引数に渡された値を数値変換して、演算子の種類によってメソッドを呼び出してその引数に2つの数値を渡しているだけです。

ただこれって言ってしまえば基礎レベルなので、これを理解できていないってことはおそらくtry~catch文の意味とかBigDecimalの各メソッドの働きとか全くわかってないですよね?
Qiitaに質問して答えてもらえば当然すぐにわかりますが、今後のことを考えるとこのコードで言う計算処理までの流れくらいは理解できるように色々なコードに触れるべきだと思います。

コマンドライン引数もオブジェクト指向におけるメソッドの使い方も本当に基礎レベルなので、順序を追って勉強するべきです。

1

Comments

  1. 追記となりますが、おすすめとしては、最小構成からコードの製作を始めることです。
    まずは入力した値をSystem.out.println()メソッドで表示するところから、それができたら入力された値を数値変換して適当な計算をして表示するコード、それができたら条件分岐して計算を分けるコード、それができたら...といった具合に、少しずつ肉付けしていくと自分で作ったコードの処理が理解しやすくなります。

Your answer might help someone💌