Java08

方法练习:计算器

写一个计算器,要求实现加减乘除功能,并且能够循环接收新数据,通过用户交互实现.
思路:

  • 写四个方法:加减乘除
  • 利用循环和switch进行用户交互
  • 传递需要操作的两个数
  • 输出结果
  • 利用刚学的递归来实现循环接收的功能

实现代码

package com.june.method;

import java.util.Scanner;

public class Calculator {
    public static Scanner scanner = new Scanner(System.in);
    public static int n = 0;
    public static int a = 0, b = 0;
    public static String operator = "";

    public static void main(String[] args) {
        calculate();
    }

    public static void calculate(){
        if (n % 3 == 0){
            operator = scanner.next();
            switch (operator) {
                case "+":
                    break;
                case "-":
                    break;
                case "*":
                    break;
                case "/":
                    break;
                case "q":
                    return;
                default:
                    System.out.println("输入符号不合法");
                    return;
            }
            n++;
        }else if (n % 3 == 1) {
            a = scanner.nextInt();
            n++;
        }else {
            b = scanner.nextInt();
            n++;
        }
        if (n % 3 == 0 && n > 1) {
            switch (operator) {
                case "+":
                    add(a, b);
                    break;
                case "-":
                    minus(a, b);
                    break;
                case "*":
                    multiply(a, b);
                    break;
                case "/":
                    divide(a, b);
                    break;
                case "q":
                    return;
                default:
                    System.out.println("输入符号不合法");
                    return;
            }
        }
        calculate();
    }

    public static void add(int a, int b){
        System.out.println(a+b);
    }
    public static void minus(int a, int b){
        System.out.println(a-b);
    }
    public static void multiply(int a, int b){
        System.out.println(a*b);
    }
    public static void divide(int a, int b){
        System.out.println(a/(double)b);
    }
}

参考他人代码后发现的问题

  1. Scanner对象未及时关闭,应在main方法最后加一句scanner.close();
  2. 未充分考虑健壮性,除法应对除数为0的情况做异常处理.

改进代码

再次查看代码后发现初次的实现代码中存在多处冗余判断及冗余变量,对其进行删除和改进.
改进后代码:

package com.june.method;

import java.util.Scanner;

public class Calculator2 {
    public static Scanner scanner = new Scanner(System.in);
    public static String operator = "";

    public static void main(String[] args) {
        calculate();
    }
    public static void calculate(){
        operator = scanner.next();
        switch (operator) {
            case "+":
                add(scanner.nextInt(), scanner.nextInt());
                break;
            case "-":
                minus(scanner.nextInt(), scanner.nextInt());
                break;
            case "*":
                multiply(scanner.nextInt(), scanner.nextInt());
                break;
            case "/":
                divide(scanner.nextInt(), scanner.nextInt());
                break;
            case "q":
                return;
            default:
                System.out.println("输入符号不合法");
                return;
        }
        calculate();
    }

    public static void add(int a, int b){
        System.out.println(a+b);
    }
    public static void minus(int a, int b){
        System.out.println(a-b);
    }
    public static void multiply(int a, int b){
        System.out.println(a*b);
    }
    public static void divide(int a, int b){
        if (b == 0) {
            System.out.println("除数不合法");
        } else {
            System.out.println(a/(double)b);
        }
    }
}
tag(s):
show comments · back · home