新手作业:用java写一个命令行窗口的计算器

先看看效果吧

话不多说,先上源码

import java.util.Scanner;

public class Calculator02 {
    public static void main(String[] args) {
        double firstNum;
        double secondNum;
        String operator;
        double outcome;

        Scanner scanner = new Scanner(System.in);

        while (true) {
            //判断是否退出计算器
            System.out.println("这里是小谙计算器,回车进入计算器,输入其他退出计算器");
            System.out.println("================================================");
            if (!scanner.nextLine().equals("")) {
                break;
            }

            //输入,算式中,数字和运算符用空格隔开
            while (true) {
                System.out.println("================================================");
                System.out.println("请输入算式,空格分隔数字和运算符");
                System.out.println("================================================");
                //输入第一个数字
                if (scanner.hasNextDouble()) {
                    firstNum = scanner.nextDouble();
                } else {
                    String s = scanner.nextLine();
                  System.out.println("================================================");
                    System.out.println("输错了,重来");
                    continue;
                }
                //输入运算符
                String next = scanner.next();
                if (next.equals("+")||next.equals("-")||next.equals("*")
                        ||next.equals("/")){
                    operator = next;
                }else{
                    scanner.nextLine();
                  System.out.println("================================================");
                    System.out.println("输错了,重来");
                    continue;
                }
                //输入第二个数字
                if (scanner.hasNextDouble()) {
                    secondNum = scanner.nextDouble();
                } else {
                    String s = scanner.nextLine();
                  System.out.println("================================================");
                    System.out.println("输错了,重来");
                    continue;
                }
                scanner.nextLine();
                break;
            }


            //计算输出
            switch (operator) {
                case "+":
                    outcome = add(firstNum,secondNum);
                    break;
                case "-":
                    outcome = subtract(firstNum,secondNum);
                    break;
                case "*":
                    outcome = multiply(firstNum,secondNum);
                    break;
                case "/":
                    outcome = divide(firstNum,secondNum);
                    break;
                default:
                    outcome = 0;
            }
            //输出结果
            System.out.println("================================================");
            System.out.println(firstNum + operator + secondNum + "=" + outcome);
            System.out.println("================================================");
        }

        scanner.close();
    }
//下面是加减乘除的方法
    public static double add(double a, double b) {
        return a + b;
    }

    public static double subtract(double a, double b) {
        return a - b;
    }

    public static double multiply(double a, double b) {
        return a * b;
    }

    public static double divide(double a, double b) {
        return a / b;
    }
}

这个计算器的优点是:

1. 可以循环使用,根据提示,敲回车键就进入计算器,敲其他就退出。

2. 输入方便,输入:1 + 2,再敲回车就会显示结果。

3. 容错性强,如果输入的是不符合要求的内容,那么会提示重新输入。

4. 样式美观。

 

调试中的经验

1. 字符串不能用==进行比较,而应该用equal方法进行比较 。比如

scanner.next()=="a"

是不对的,而应该写成

scanner.next().equals("a") 

不等于的话也不能这么写: 

scanner.next()!="a"

应该写成

!scanner.next().equals("a")

2.  同一个方法中只能new一次Scanner对象。反复new和close scanner是会报错的。

3. 使用hasNextDouble一类的方法后要将输入流中的所有字符提取出来以清空缓冲区,否则后续输入会直接取上一次输入的字符!

4. 不要用next或者nextInt等一类方法清空剩余字符,因为它们不会提取最后的回车号。 

5. 用nextLine就没问题,因为它会提取包括回车号在内的所有的字符(虽然它的返回值不包括最后一个回车号)。 但是,如果输入流是:回车、回车、字符串、回车,那么nextline只能提取第一个回车,并输出空字符,所以,用nextLine清空缓冲区也不是绝对可靠的。

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值