作业:简单计算器的实现

作业:简单计算器的实现

需求:完成一个简单的计算器,实现+ - * / 方法

package com.Jeremy.homework;

import java.util.Scanner;

public class calculatortest {
    static  double result = 0.0F;
    public static void main(String[] args) {

        int flag =1;
        while(flag==1){
            System.out.println("input equation ,eg: 5.1 - 1");
            Scanner scanner = new Scanner(System.in);

            //get first number
            double first_num = scanner.nextDouble();

            //get calculation type
            char choice = scanner.next().charAt(0);//scanner输入的是string类型

            //get seconde number
            double second_num = scanner.nextDouble();

            switch(choice){
                case '+' :            //case 可以直接判断char类型
                    result = add(first_num,second_num);
                    System.out.println(result);
                    break;
                case '-' :
                    result = substraction(first_num,second_num);
                    System.out.println(result);
                    break;
                case '*' :
                    result = multiplication(first_num,second_num);
                    System.out.println(result);
                    break;
                case '/' :
                    result = division(first_num,second_num);
                    System.out.println(result);
                    break;
                default:
                    System.out.println("the input calculation type out of range");
                    break;
            }
            System.out.println(" continue? input 1 to continue ,other to exit");
            flag = scanner.nextInt();
        }
    }
    public static double add(double i, double j, double... m){ //多个参数的运算暂未实现
        for (int i1 = 0; i1 < m.length; i1++) {
            result+=m[i1];
        }
        return i+j+result;
    }
    public static double substraction(double i , double j ){
        result = i-j;
        return result;
    }
    public static double multiplication(double i , double j ){
        result = i*j;
        return result;
    }
    public static double division(double i , double j ){
        result = i/j;
        return result;
    }
}

问题总结:

1. Scanner对象

  1. 可以多次调用scanner对象获取键盘输入值,不需要生成多个scanner对象。
  2. scanner获取的对象以String类型存在。
    1. 获取 String 类型数据可以直接 scanne.next()方法
    2. 获取 Int 、Float 、Double 类型的数据可以使用scanne.nextInt()scanne.nextFloat()scanne.nextDouble()
    3. 获取 Char 类型的数据需要通过scanne.next().CharAt(0)方法

2. switch case 多分支判断

  1. switch (expression) {},其中 expression可以是一下类型
    1. 基本数据类型:byte, short, char, int
    2. 包装数据类型:Byte, Short, Character, Integer
    3. 枚举类型:Enum
    4. 字符串类型:String
  2. case valueType: ,其中valueType可以是常量或者字面常量:
    1. 数值
    2. ‘ char ’
    3. “ String ”
  3. case后面如果不加break,会形成穿透效果。可以利用这个穿透效果,如实现设置12个月的天数,1、3、5、7、8、10、12这几个月统一用一个break。

3. 方法的未知个数参数输入

  1. public static double add(double i, double j, double... m){
        for (int i1 = 0; i1 < m.length; i1++) {
            result+=m[i1];
        }
        return i+j+result;
    

4. 运算精度问题

  1. 计算机中float和double类型都是用二进制进行表示:
    1. 整数转二进制通过除2取余,从下往上排列,并总能除尽。
    2. 小数转二进制通过乘2取余,有的小数如0.9、0.6乘2取小数会循环下去。运算的时候取16位或者32位,就会导致精度丢失的问题。
  2. 解决办法: 通过Big'Decimal类的 BigDecimal(String value)将String型数据转换成BigDecimal型数据,然后调用运算方法,得到的BigDeciaml型数据通过doubleValue()方法转换为Double 。如https://www.cnblogs.com/xujishou/p/7491932.html

5.暂未实现的功能,多个数的运算

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值