Java实现最简单的计算机功能

啥也不说,直接上代码

方案一:

 public static void main(String[] args) {
        System.out.println("请输入数字a");
        double a=new Scanner(System.in).nextDouble();
        System.out.println("请选择运算符号(+ ,-,*,/): ");
        String x=new Scanner(System.in).next();
        System.out.println("请输入数字b");
        double b=new Scanner(System.in).nextDouble();
        BigDecimal a1 = new BigDecimal(a + "");
        BigDecimal b1 = new BigDecimal(b + "");
        BigDecimal  c;

        if(x.equals("+")){
        c=a1.add(b1);
            System.out.println("结果:"+c);
        }else if(x.equals("-")){
       c=a1.subtract(b1);
            System.out.println("结果:"+c);
        }else if(x.equals("*")){
            c=a1.multiply(b1);
            System.out.println("结果:"+c);
        }else if(x.equals("/")){
            while(b==0){
                System.out.println("除数不能为0,请重新输入!");
              b=new Scanner(System.in).nextDouble();
              b1 = new BigDecimal(b + "");
                //throw new ArrayIndexOutOfBoundsException("除数不能为0");
            }
                c = a1.divide(b1, 3, BigDecimal.ROUND_HALF_UP);
                System.out.println("结果:" + c);
        }else {
            System.out.println("符号输入错误!");
        }

    }

方案二:

  public static void main(String[] args) {
        try {
            System.out.println("请输入数字a");
            double a=new Scanner(System.in).nextDouble();
            System.out.println("请选择运算符号(+ ,-,*,/): ");
            String x=new Scanner(System.in).next();
            System.out.println("请输入数字b");
            double b=new Scanner(System.in).nextDouble();
            BigDecimal a1 = new BigDecimal(a + "");
            BigDecimal b1 = new BigDecimal(b + "");
            BigDecimal  c;
          switch (x){
              case "+":     c=a1.add(b1);
                  System.out.println("结果:"+c);break;
              case "-":    c=a1.subtract(b1);
                  System.out.println("结果:"+c);break;
              case "*":   c=a1.multiply(b1);
                  System.out.println("结果:"+c); break;
              case "/":    while(b==0) {
                  System.out.println("除数不能为0,请重新输入!");
                  b = new Scanner(System.in).nextDouble();
                  b1 = new BigDecimal(b + "");
              }
                  c = a1.divide(b1, 3, BigDecimal.ROUND_HALF_UP);
                  System.out.println("结果:" + c);
          }
        }catch (Exception e){
            System.out.println("你的输入有误"+e.getCause());
        }
    }

第二中相比第一种有一定程度上的优化,但是还有不足点,就是运算符号的控制,只有+ - *  / 四种符号,万一用户输错了怎能办,可以用正则表达式来控制,感兴趣的话大家可以试试!

前面两种代码耦合性太高,正常业务中肯定不能这么写的,维护性和可扩展性太差,一般业务中都会对代码进行松耦合,提高程序的可维护性和扩展性;

方案三:

// Operation类
public class TestFactoryModel3Operation {
    private BigDecimal numberA;
    private BigDecimal numberB;

    public BigDecimal getNumberA() {
        return numberA;
    }
    public void setNumberA(BigDecimal numberA) {
        this.numberA = numberA;
    }
    public BigDecimal getNumberB() {
        return numberB;
    }
    public void setNumberB(BigDecimal numberB) {
        this.numberB = numberB;
    }
    public BigDecimal getresult(){
        BigDecimal result=null;
        return result;
    }
}

因为现在我们只考虑两个数之间的运算,所以可以将这两个数进行封装,外部利用set和get方法获取和设置值,再添加一个getresult方法来获取两个数的运算结果,后期如果再对多个数进行运算时采用例似的方法就行,如果要添加其他的运算,比如开平方,此段代码根本就不用动,只需要修改后面的就行,可展现提高很多,也实现了松耦合的思想。

//加法运算
 class OperationAdd extends TestFactoryModel3Operation{
    @Override
    public BigDecimal getresult(){
       BigDecimal result=null;

       result=getNumberA().add(getNumberB());
       return result;
    }
 }

 //减法运算
class OperationSub extends TestFactoryModel3Operation{
    @Override
    public BigDecimal getresult(){
        BigDecimal result=null;
        result=getNumberA().subtract(getNumberB());
        return result;
    }
}

//乘法运算
class OperationMul extends TestFactoryModel3Operation{
    @Override
    public BigDecimal getresult(){
        BigDecimal result=null;
        result=getNumberA().multiply(getNumberB());
        return result;
    }
}

//除法运算
class OperationDiv extends TestFactoryModel3Operation{
    @Override
    public BigDecimal getresult(){
        BigDecimal result=null;
          result= getNumberA().divide(getNumberB(),3, RoundingMode.HALF_UP);
        return result;
    }
}

加减乘除四个操作分开写,都继承TestFactoryModel3Operation类,以便后期重写该类中的getresult方法来获取计算结果,

后期如果要添加其他的运算,只需再写一个类就行(比如开平方运算,幂运算等)

//简单工厂类,主要用来创建对象
class OperationFactory{
    public static TestFactoryModel3Operation createOperation(String operate){
        TestFactoryModel3Operation oper=null;
        switch (operate){
            case "+": oper=new OperationAdd();break;
            case "-": oper=new OperationSub();break;
            case "*": oper=new OperationMul();break;
            case "/": oper=new OperationDiv();break;
        }
         return oper;
    }
}

     利用简单工厂模式来实例化对象,但是具体要实例化哪个呢?是怎么来区分的呢?,当然是根据用户输入的运算符号来确定的,createOperation(String operate) ,根据该方法的传入的参数来确定实例化那个运算类的对象,从而执行具体的方法进行运算,最后再重写getresult方法来获取值;

 //客户端类
class Cliet{
    public static void main(String[] args) {
        try {
            System.out.println("请输入数字a");
            double a=new Scanner(System.in).nextDouble();
            System.out.println("请选择运算符号(+ ,-,*,/): ");
            String x=new Scanner(System.in).next();
            System.out.println("请输入数字b");
            double b=new Scanner(System.in).nextDouble();
            TestFactoryModel3Operation oper;
                   oper = OperationFactory.createOperation(x);
            BigDecimal a1 = new BigDecimal(a+"");
            BigDecimal b1 = new BigDecimal(b+"");
                   oper.setNumberA(a1);
                   oper.setNumberB(b1);
            BigDecimal result = oper.getresult();
            System.out.println("结果是:"+result);
        }catch (Exception e){
            System.out.println("输入有误"+e.getCause());
        }
    }

}

     main方法,程序入口,用来调用之前的类,由于用户可能会输入不合规的字符,所以利用try catch来捕获异常,(注意一下,我用的一直都是BigDecimal),当然也可以用double,不过会出现计算不精确的问题,

根据运算符来确定要实例化那个对象:

TestFactoryModel3Operation oper;
       oper = OperationFactory.createOperation(x);

      给numberA和number B两个数赋值:

  BigDecimal a1 = new BigDecimal(a+"");
   BigDecimal b1 = new BigDecimal(b+"");
       oper.setNumberA(a1);
       oper.setNumberB(b1);

     调用重写后的方法来获取计算得出的值:

  BigDecimal result = oper.getresult();
            System.out.println("结果是:"+result);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要用 Java 编写一个最简单计算机系统,你需要做以下几步: 1. 安装 Java Development Kit (JDK),这是 Java 的开发工具包,包含了 Java 编译器和其他必要的工具。你可以在 Oracle 网站上下载并安装 JDK。 2. 创建一个 Java 源文件。Java 源文件是以`.java`为扩展名的文本文件,用来保存你的 Java 代码。你可以使用任何文本编辑器来创建和编辑 Java 源文件。 3. 编写 Java 代码。你可以在 Java 源文件中编写你的计算机系统的代码。为了编写最简单计算机系统,你可以先写一个简单的程序,比如打印输出一行文本。 4. 编译 Java 代码。使用 JDK 中的 `javac` 命令来编译你的 Java 代码。这会生成一个名为 `.class` 的字节码文件。 5. 运行 Java 程序。使用 JDK 中的 `java` 命令来运行你的 Java 程序。这会执行你在 Java 源文件中编写的代码。 下面是一个示例 Java 程序,它打印输出了一行文本: ```java public class Main { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` 编译并运行这个程序的方法如下: 1. 在命令行中进入到 Java 源文件所在的目录。 2. 输入 `jav ### 回答2: 编写一个最简单计算机系统可以分为以下几个步骤: 1. 设计计算机系统的基本组成部分:包括中央处理器(CPU)、内存、输入输出设备等。 2. 定义计算机指令集:包括基本的算术运算指令、逻辑运算指令和控制指令等。可以使用汇编语言定义这些指令。 3. 编写CPU的控制单元代码:控制单元负责解析和执行指令,可采用状态机的方式实现。 4. 设计内存存储结构:包括指令存储区和数据存储区。可以使用简单的数组来模拟内存。 5. 编写简单的编译器或解释器:将高级语言转换为机器指令,或直接解释执行高级语言。 6. 设计输入输出接口:包括输入设备如键盘,输出设备如显示器或打印机等。 7. 编写操作系统:管理计算机资源,提供对计算机系统的更高级别的抽象和控制。 综上,可以使用Java面向对象的特性定义计算机系统的各个组成部分,并利用Java的控制结构、数组等语法特性来实现控制单元、内存存储结构、编译器或解释器、输入输出接口等。 例如,可以使用Java类来模拟CPU的控制单元,定义指令集的表示和解析逻辑。使用Java数组来模拟内存存储结构,定义指令存储区和数据存储区。使用Java的输入输出类来实现输入输出接口。 总之,用Java编写一个最简单计算机系统涉及到多个方面的设计和实现,需要理解计算机系统的基本原理和组成部分,并运用Java语言的特性来实现这些功能。 ### 回答3: 用Java编写一个最简单计算机系统需要实现以下几个重要的组件: 1. 输入模块:设计一个能够获取用户输入的界面,可以使用Java的图形用户界面(GUI)库,如Swing或JavaFX,或者使用命令行界面。用户可以在该界面中输入数字和操作符,用于进行计算。 2. 计算模块:实现一个计算逻辑,可以接收用户输入的数字和操作符,并根据操作符对数字进行相应的计算。可以使用Java的运算符和数学函数实现常见的加法、减法、乘法和除法等运算。 3. 显示模块:设计一个界面显示计算结果,可以在GUI界面中显示计算结果的文本标签或输出到命令行界面。将计算结果以适当的格式显示给用户。 4. 控制模块:设计一些控制逻辑,以便根据用户的输入调用适当的计算函数,并将结果显示给用户。例如,当用户输入完成后,可以通过监听用户点击的按钮或监听键盘输入来触发计算和显示结果操作。 编写一个最简单计算机系统的示例代码如下: ```java import java.util.Scanner; public class SimpleCalculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个数字:"); double num1 = scanner.nextDouble(); System.out.print("请输入操作符:"); String operator = scanner.next(); System.out.print("请输入第二个数字:"); double num2 = scanner.nextDouble(); double result; switch (operator) { case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": result = num1 / num2; break; default: System.out.println("无效的操作符"); return; } System.out.println("计算结果为:" + result); } } ``` 这是一个命令行界面的示例,可以通过控制台输入两个数字和操作符,然后得到计算结果。你可以根据需要对这个最简单计算机系统进行拓展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值