1

簡単な足し算、引き算、掛け算、割り算ができる計算機を作りました。私はJavaの経験があまりなく、オンラインでいくつかのチュートリアルを完了しただけであることを念頭に置いて、私のプログラムを簡素化できるかどうかを知りたいです。これが私の単純な電卓のコードです。

import java.util.Scanner;
public class Attempt1 {

    public static void main (String []arg){

        double fnum, snum, tnum;
        double answer = 0;
        int turn = 0;
        String operator = "nothing";

        Scanner number = new Scanner(System.in);    
        Scanner Symbol = new Scanner(System.in);

        System.out.println("Enter number");

        if (number.hasNextDouble()){

            fnum = number.nextDouble();

            operator = Symbol.nextLine();

            switch (operator){

            case "+": 
                if (number.hasNextDouble()){

                    snum = number.nextInt();
                    answer = fnum + snum;
                    System.out.println(answer);
                }
                break;
            case "-":
                if (number.hasNextDouble()){

                    snum = number.nextInt();
                    answer = fnum - snum;
                    System.out.println(answer);
                }
                break;
            case "*":
                if (number.hasNextDouble()){

                    snum = number.nextInt();
                    answer = fnum * snum;
                    System.out.println(answer);
                }
                break;
            case "/":
                if (number.hasNextDouble()){

                    snum = number.nextInt();
                    answer = fnum / snum;
                    System.out.println(answer);
                }
                break;
            default:
                System.out.println("You did not enter a number:");
            }

        }else{

            System.out.println("Error");
        }
        do {

            operator = Symbol.nextLine();

            switch (operator){
            case "+": 
                if (number.hasNextDouble()){

                    tnum = number.nextInt();
                    answer = answer + tnum;
                    System.out.println(answer);
                }break;
            case "-":
                if (number.hasNextDouble()){

                    tnum = number.nextInt();
                    answer = answer - tnum;
                    System.out.println(answer);
                }
                break;
            case "*":
                if (number.hasNextDouble()){

                    tnum = number.nextInt();
                    answer = answer * tnum;
                    System.out.println(answer);
                }
                break;
            case "/":
                if (number.hasNextDouble()){

                    tnum = number.nextInt();
                    answer = answer / tnum;
                    System.out.println(answer);
                }
                break;
            default:
                System.out.println("You did not enter a number:");
            }   
        }while (turn < 10);

    }
}

ありがとう

4

1 に答える 1

1

はい、できます。Java はオブジェクト指向であるため、コードはオブジェクト指向の方法で設計する必要があります。電卓の場合、すべての作業を行う 1 つのメソッドがあります。コードの繰り返し行を再利用できないため、これは不適切なスタイルです。上記の例では、すべての演算子の 2 つの場所に同じコードがあります。代わりに、引数を処理できるパラメーター化されたメソッドに分割する必要があります。

public static double operate(String operator, double first, double second){
   switch(operator){
      case "+": return first + second;
      case "-": return first - second;
      //etc...
   }
}

数値を取得するためのロジックも、数値を取得するために何度でも呼び出すことができる別のメソッドである必要があります。例えば:

public static double promptNumber(Scanner scan){
    System.out.print("Please enter a number: ");
    if(scan.hasNextDouble())
       return scan.nextDouble();
    else {
       scan.nextLine(); 
       System.out.println("That is not a number");
       return promptNumber(scan);
    }
}

これら 2 つのヘルパー メソッドを使用すると、コードを大幅に簡素化し、よりクリーンにすることができます。幸運を!

于 2013-11-07T18:35:58.103 に答える