0 0

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

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;		
		}
		
	}
}


问题补充:如果不是,能不能指点一下。大概得怎么写。最好是贴出代码啦,学习学习
2014年6月20日 23:46

2个答案 按时间排序 按投票排序

0 0

采纳的答案

将计算的抽一个接口出来ICalculator,具体计算实现该接口。如果要加功能,添加其它计算方法,添加实现类就好了,另外可以弄一个Factory负责创建这些Calculator。代码简单贴一下。

public interface ICalculator {
	public double calculate(double ...args);
}



//加法
public class PlusCalculator implements ICalculator {
	@Override
	public double calculate(double... args) {
		double res = 0;
		for(double arg:args)
			res += arg;
		return res;
	}
}




//减法
public class MinusCalculator implements ICalculator {

	@Override
	public 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 {
	@Override
	public double calculate(double... args) {
                //只接受一个参数
		if(args.length == 1)
			return args[0]*args[0];
		else
			return 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));
		
	}

2014年6月21日 23:21
0 0

这样写不好,应该用接口实现

2014年6月21日 15:22

相关推荐

    Demo.rar_DEMO_java编程

    对于初学者来说,这个DEMO可以帮助他们了解如何在实际项目中应用Java语言和面向对象的设计思想。 【压缩包子文件的文件名称列表】仅列出了"homework2",这可能是一个源代码文件夹或者是一个具体的Java源代码文件。...

    java依赖倒置demo.zip

    这个原则是面向对象设计的五大原则(SOLID)之一,旨在提高代码的可复用性和可维护性。在Java开发中,依赖倒置原则的应用能帮助我们编写出更松耦合、更易于测试的代码。 依赖倒置原则的核心思想是"高层模块不应该...

    Qt 通讯软件模块的仿写

    这是我刚入门Qt模仿一款通讯软件写的一个小demo,但到现在才给他传上来,里面做到的一些功能都是比较基础的,但却又涉及到Qt的比较多的知识。涉及的技术点: 1.各种 Qt Widget 控件 2. QSS 的使用,自定义控件样式 3...

    Java设计模式-代理模式

    代理模式的核心思想是在目标对象和客户端之间插入一个代理对象,代理对象可以扩展目标对象的功能,同时也能控制对目标对象的访问。 代理模式在Java中有两种常见的实现方式:静态代理和动态代理。静态代理是通过...

    sklearn.rar

    sklearn相关的代码demo,可以下载下来学习,里面包括sklearn如何封装代码,如何使用面向对象编程的思想拟合出一个模型,并计算准确率,确定超参数。

    ssh2(struts2+spring2.5+hibernate3.3)自动生成模版

    还有配置文件的一些注入,以及命名,会有很多种,可能这时会有很多人认为只要function体里面的代码逻辑质量高,很规范的运用了面向对象的思想,对逻辑封装的好,性能高,这些规范不规范的有什么问题,影响不了程序的性能,...

    asp.net(c#)多层分布式架构实例源码

    注:这是我参考一些多层架构的资料结合对多层的理解写的一个demo,用了两天时间,可能不是很标准,大家看的时候,有什么意见多多交流,一起探讨.分页那里还有点bug,不过我想以后再改进了(分页封装到数据层我总觉得...

Global site tag (gtag.js) - Google Analytics