这个小demo,不知道有没面向对象的思想在里面?

问题描述

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import com.shenchen.model.Item;import com.shenchen.type.Types;import com.shenchen.util.Calculator;public class Main {public static void main(String[] args) throws Exception, IOException {InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);Item item = new Item();Double num1 = Double.parseDouble( br.readLine());item.setNum1(num1);System.out.println("请输入一个运算符号:");String str = br.readLine();switch (str) {case "+":item.setType(Types.JIA);break;case "-":item.setType(Types.JIAN);break;case "*":item.setType(Types.CHENG);break;case "/":item.setType(Types.CHU);break;default:System.out.println("符号错误!");System.exit(0);}System.out.println("请输入一个数字:");Double num2 = Double.parseDouble(br.readLine());item.setNum2(num2);new Calculator(item);}}public class Item {double num1;double num2;int type;public void setNum1(double num1) {this.num1 = num1;}public void setNum2(double num2) {this.num2 = num2;}public void setType(int type) {this.type = type;}public double getNum1() {return num1;}public double getNum2() {return num2;}public int getType() {return type;}}public class Types {public final static int JIA = 1;public final static int JIAN = 2;public final static int CHENG =3;public final static int CHU = 4;}import com.shenchen.model.Item;import com.shenchen.type.Types;public class Calculator {double result;public Calculator(Item item) {double num1 = item.getNum1();double num2 = item.getNum2();switch (item.getType()) {case Types.JIA:result = num1+num2;System.out.println(num1+"+"+num2+" = "+result);break;case Types.JIAN:result = num1-num2;System.out.println(num1+"-"+num2+" = "+result);break;case Types.CHENG:result = num1*num2;System.out.println(num1+"*"+num2+" = "+result);break;case Types.CHU:result = num1/num2;System.out.println(num1+"/"+num2+" = "+result);break;}}} 问题补充:如果不是,能不能指点一下。大概得怎么写。最好是贴出代码啦,学习学习

解决方案

将计算的抽一个接口出来ICalculator,具体计算实现该接口。如果要加功能,添加其它计算方法,添加实现类就好了,另外可以弄一个Factory负责创建这些Calculator。代码简单贴一下。public interface ICalculator {public double calculate(double ...args);}//加法public class PlusCalculator implements ICalculator {@Overridepublic double calculate(double... args) {double res = 0;for(double arg:args)res += arg;return res;}}//减法public class MinusCalculator implements ICalculator {@Overridepublic double calculate(double... args) {if (args.length == 0)return 0;double res = args[0];for (int i = 1; i < args.length; ++i) {res -= args[i];}return res;}}//平方public class SquareCalculator implements ICalculator {@Overridepublic double calculate(double... args) { //只接受一个参数if(args.length == 1)return args[0]*args[0];elsereturn 0;}}//操作类型public enum CalculatorType {PlusCalculator,MinusCalculator,SquareCalculator;}//工厂public class CalculatorFactory {public static ICalculator getCalculator(CalculatorType type) {ICalculator calculator = null;switch (type) {case MinusCalculator:calculator = new MinusCalculator();break;case PlusCalculator:calculator = new PlusCalculator();break;case SquareCalculator:calculator = new SquareCalculator();break;default:break;}return calculator;}}//测试代码public static void main(String[] args) {double arg1 = 100;double arg2 = 90;double arg3 = 80;ICalculator calculator = CalculatorFactory.getCalculator(CalculatorType.PlusCalculator);System.out.println(calculator.calculate(arg1,arg2,arg3));calculator = CalculatorFactory.getCalculator(CalculatorType.MinusCalculator);System.out.println(calculator.calculate(arg1,arg2,arg3));calculator = CalculatorFactory.getCalculator(CalculatorType.SquareCalculator);System.out.println(calculator.calculate(arg1));}
解决方案二:
这样写不好,应该用接口实现

时间: 2024-09-19 09:10:50

这个小demo,不知道有没面向对象的思想在里面?的相关文章

以下我写的一个javascript的web worker,但不知道为什么没数据返回了.

问题描述 以下我写的一个javascript的web worker,但不知道为什么没数据返回了. <!DOCTYPE html> function post(){ var wo1=new Worker("wroker1.js"); var a=document.getElementById("input"); wo1.postMessage(a.value); wo1.onmessage=function(event){ document.getElem

一个实现自定义event的文章。。。我还没有完全摸透。。不知道有没人有兴趣。。新手就不用看了,先学会

The latest offering from Microsoft to support software development is the .NET Framework. Inside this vast Framework is the ASP.NET. The ASP.NET facilitates the application development community in generating high performance Web based applications t

c++-第二小问不知道如何搞

问题描述 第二小问不知道如何搞 c++实验:要求使用指针处理下面的问题,输入四个整数,按由小到大的顺序输出:然后将程序改为:输入四个字符串,按由小到大顺序输出. 按题目编写程序.急求!!!!!!!!!!!!! 解决方案 比较字符串可以用strcmp()函数啊

基于BaseAdapter的Listview小Demo

ListView是Android开发中比较常用的控件, 其中适配器模式可以选择: ArrayAdapter:简单易用,通常用于将数组或者List集合的读个包值封装成多个列表项 SimpleAdapter:其实功能很强大将数组或者List集合的读个包值封装成多个列表项 SimpleCursorAdapter:与SimpleAdapter基本类似只是用于包装Cursor提供的数据 BaseAdapter:通常用于被扩展,扩展BaseAdapter可以对各列表项进行最大的定制 而且ListView组件

ofbiz做一个小demo,配置好了之后,在页面上跑。报404错误,请问该怎么解决

问题描述 ofbiz做一个小demo,配置好了之后,在页面上跑.报404错误,请问该怎么解决 ofbiz做一个小demo,配置好了之后,在页面上跑.报404错误 求大神指点

thrift的小demo谁能帮我写一个java和java传值就好

问题描述 thrift的小demo谁能帮我写一个java和java传值就好 thrift的小demo谁能帮我写一个java和java传值就好最好推荐几个文档谢谢 解决方案 谢谢你们了求助 啊 在不在 啊 解决方案二: qq 420914273我帮你写吧,大家都学生一起 帮忙

html5掷骰子的小demo

原文 html5掷骰子的小demo 代码如下: 1 <!DOCTYPE> 2 <html> 3 <title>柯乐义</title> 4 <head> 5 <script> 6 var leftX = 150; 7 var topY = 100; 8 var diceX = 80; 9 var diceY = 80; 10 var dotR = 4; 11 var count = 0; 12 var lastNum = 0; 13 v

spring-struts2+mybatis+sprin一个小demo总是不能实例化

问题描述 struts2+mybatis+sprin一个小demo总是不能实例化 public class RegisterAction { private RegisterDao registerDao; private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this

求一个用于图片缩小消失小demo

问题描述 求一个用于图片缩小消失小demo 需求是:不管我点击屏幕的哪里除下imageview上图片都要缩小消失 解决方案 那就先弄个控件占满整个屏幕,然后监听点击事件,然后在里面调用函数让这个imageview消失 解决方案二: 网页还是什么?网页 document.onclick=function(){document.getElementById('imageview').style.display='none'}