怎么用抽象和接口方法做加减乘除运算?

EnjoyDark 2016-05-26 06:12:47
(老师让做的,有点搞晕了,给点提示都可以的)
...全文
333 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2016-05-27
  • 打赏
  • 举报
回复


package test;

import java.io.*;

interface Calculator {
	public double calculate(double a, double b);
}

class Add implements Calculator{
	public double calculate(double a, double b){
		return a + b;
	}
}

class Sub implements Calculator{
	public double calculate(double a, double b){
		return a - b;
	}
}

class Mul implements Calculator {
	public double calculate(double a, double b){
		return a * b;
	}
}

class Div implements Calculator {
	public double calculate(double a, double b){
		return a / b;
	}
}

class CalculatorFactory {
	
	private static final Calculator add = new Add();
	private static final Calculator sub = new Sub();
	private static final Calculator mul = new Mul();
	private static final Calculator div = new Div();
	
	public static Calculator fromChar(char c){
		if(c == '+')
			return add;
		if(c == '-')
			return sub;
		if(c == '*')
			return mul;
		if(c == '/')
			return div;
		return null;
	}
}

public class Test {
	
	public static void main(String[] args) {
		
		Reader reader = null;
		BufferedReader breader = null;
		
		System.out.print("输入运行符:");
		
		try{
			reader = new InputStreamReader(System.in);
			breader = new BufferedReader(reader);
			
			while(true){
				System.out.print("输入运算符:");
				String strC = breader.readLine().trim();
				if(strC.length() > 1){
					System.out.println("无效的运算符");
					break;
				}
				Calculator calculator = CalculatorFactory.fromChar(strC.charAt(0));
				if(calculator == null) {
					System.out.println("无效的运算符");
					break;
				}
				
				System.out.print("输入第一个数:");
				String strA = breader.readLine().trim();
				Double a = null;
				try{
					a = Double.parseDouble(strA);
				}catch(Exception ex){
				}
				if(a == null) {
					System.out.println("无效的数");
					break;
				}
				
				System.out.print("输入第一个数:");
				String strB = breader.readLine().trim();
				Double b = null;
				try{
					b = Double.parseDouble(strB);
				}catch(Exception ex){
				}
				if(b == null) {
					System.out.println("无效的数");
					break;
				}
				
				System.out.println("计算结果是:" + calculator.calculate(a, b));
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}finally{
			if(breader != null){
				try{ 
					breader.close();
				}catch(Exception ex){
				}
			}
			if(reader != null){
				try{
					reader.close();
				}catch(Exception ex){
				}
			}
		}
	}
}
小灰狼 2016-05-27
  • 打赏
  • 举报
回复
题目出得好抽象 你们老师好象是为了让你们用到抽象和接口才出这个题的,但如果没去上过课,不知道你们老师讲的内容,还真不知道怎么做这个题才能让你的老师满意
qq_15915835 2016-05-27
  • 打赏
  • 举报
回复
引用 4 楼 qq_15915835 的回复:
建议看一下大话设计模式,第一章好像就是这个例子
具体就是 定义一个抽象类或者接口,抽象方法是计算,然后定义加减乘除四个子类各自实现自己的计算逻辑,结合简单工厂。搞定
qq_15915835 2016-05-27
  • 打赏
  • 举报
回复
建议看一下大话设计模式,第一章好像就是这个例子
oxcow 2016-05-27
  • 打赏
  • 举报
回复
加减乘除: 需要2个参数 和一个操作符 然后就是计算结果 抽像方法: 拿到参数1 拿到参数2 拿到参数 操作符 具体的实现方法, 计算结果
EnjoyDark 2016-05-27
  • 打赏
  • 举报
回复
那抽象方法用哪里?
爱睡觉的阿狸 2016-05-26
  • 打赏
  • 举报
回复
定义一个运算接口,接口里面写四个方法,分别是加减乘除,后面用具体类去实现。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧