package practice;
import java.util.Scanner;
/**
* @date 2020/2/27
* @author 重工黑大帅
* 实现功能:实现计算机简单四则运算
*/
public class Demo {
public static void main(String[] args) {
Operation o = new Operation();
o.fun();
}
}
class Operation{
Scanner scanner = new Scanner(System.in);
//做加法运算
public void add() {
System.out.println("你选择的是加法");
System.out.print("请输入第一个数:");
int x = scanner.nextInt();
System.out.print("请输入第二个数:");
int y = scanner.nextInt();
System.out.println("所求结果为:"+(x+y));
}
// 减法运算
public void sub() {
System.out.println("你选择的是减法");
System.out.print("请输入第一个数:");
int x = scanner.nextInt();
System.out.print("请输入第二个数:");
int y = scanner.nextInt();
System.out.println("所求结果为:"+(x-y));
}
// 乘法运算
public void mul() {
System.out.println("你选择的是乘法");
System.out.print("请输入第一个数:");
int x = scanner.nextInt();
System.out.print("请输入第二个数:");
int y = scanner.nextInt();
System.out.println("所求结果为:"+(x*y));
}
// 除法运算
public void div() {
System.out.println("你选择的是除法");
System.out.print("请输入第一个数:");
int x = scanner.nextInt();
System.out.print("请输入第二个数:");
int y = scanner.nextInt();
if (y == 0) {
System.out.println("注:被除数不能为0,程序结束");
} else {
System.out.println("所求结果为:"+(x/y));
}
}
public void fun() {
System.out.println("请输入你的操作:1:加法,2:减法,3:乘法,4:除法");
int choose = scanner.nextInt();
switch (choose) {
case 1: {
add();
break;
}
case 2: {
sub();
break;
}
case 3: {
mul();
break;
}
case 4: {
div();
break;
}
default:{
System.out.println("输入错误,程序结束");
break;
}
}
}
}
结果显示:
过程分析:可能很多朋友拿到这道题,就会以上面的实现方式编写代码,不知道我猜对了没有,哈哈哈。如果我想增加取余的功能,那是不是应该在类Operation中添加如下代码:
// 取余运算
public void mod() {
System.out.println("你选择的是取余法");
System.out.print("请输入第一个数:");
int x = scanner.nextInt();
System.out.print("请输入第二个数:");
int y = scanner.nextInt();
System.out.println("所求结果为:"+(x%y));
}
在switch代码块中添加如下代码:
case 5: {
mod();
break;
}
那如果还想添加更多的功能,那是不是应该继续往其中写代码呢?那这样的话代码会越来越多,程序变得越来越冗杂,对于编程而言效果不是很理想。
在java面向对象编程中,学过抽象类、接口、线程等知识的你,是否会应用呢?
下面我们通过面向对象编程来实现上述功能:
这里我总共写了6个类,1个接口:
Calculate类(接口类,里面包含一个计算类型的方法):
package practice;
public interface Calculate {
public int arithmatic(int x,int y);
}
CalculateAdd类(实现加法功能):
package practice;
public class CalculateAdd extends ImplementsCalculate {
public int arithmatic(int a,int b){
System.out.println("a+b="+(a+b));
return a+b;
}
}
CalculateSub类(实现减法功能):
package practice;
public class CalculateSub extends ImplementsCalculate {
public int arithmatic(int a,int b){
System.out.println("a-b="+(a-b));
return 0;
}
}
CalculateMul类(实现乘法功能):
package practice;
public class CalculateMul extends ImplementsCalculate {
public int arithmatic(int a,int b){
System.out.println("a * b = "+(a*b));
return a+b;
}
}
CalculateDiv类(实现除法功能):
package practice;
public class CalculateDiv extends ImplementsCalculate {
public int arithmatic(int a,int b){
if (b == 0) {
System.out.println("注:被除数不能为0,程序结束");
} else {
System.out.println("所求结果为:"+(a/b));
}
return a+b;
}
}
Demo类(含有main方法的主类):
package practice;
import java.util.Scanner;
/**
* @author 重工黑大帅
* 实现功能:实现计算机简单五则运算
* @date 2020/2/28
*/
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个数a:");
int x = scanner.nextInt();
System.out.print("请输入第二个数b:");
int y = scanner.nextInt();
ImplementsCalculate a = new CalculateAdd();//根据功能需要,这儿可以进行更改
a.arithmatic(x,y);
}
}
ImplementsCalculate类(实现Calculate接口类):
package practice;
public class ImplementsCalculate implements Calculate{
public int arithmatic(int a,int b){
return 0;
}
}
结果显示:
那如果我们想拓展其他功能的话,比如进行取余运算,我们应该如下操作:
在包中添加类CalculateMod,写入以下代码:
package practice;
public class CalculateMod extends ImplementsCalculate{
public int arithmatic(int a,int b){
System.out.println("a % b = "+(a%b));
return 0;
}
}
经过上面的两种方式实现计算机简单四则运算对比,大家有没有发现使用面向对象编程代码量没有第一个方法多,而且我们在进行功能拓展时只需要增加需要的功能类,然后更改名字就可以得出我们想要的答案.第一种方法还要去类的本体中进行修改,带来一定的麻烦。本题第二种方法采用了抽象的概念:一个稳定的抽象层,加一个可以随意扩展的实现层,意思就是定义接口,通过一个类去实现这个接口,然后各个功能区继承上面实现接口的类,这种方法是不是更简单呢?抓紧时间,自己去试试吧!
拓展题目:利用单一职责求100以内的奇数和偶数
这里顺便附上7大面向对象设计原则(原则意思纯属个人理解):