//利用java接口实现计算器,实现加减乘除的功能
import java.util.Scanner;
class Test {
public static void main(String[] args) {
fun i = new fun();
jiafa s1 = new jiafa();
jianfa s2 = new jianfa();
chengfa s3 = new chengfa();
chufa s4 = new chufa();
System.out.println("请输入你要计算的两个数字:");
Scanner scanner = new Scanner(System.in);
Scanner scanner2 = new Scanner(System.in);
int str = scanner.nextInt();
int str2 = scanner2.nextInt();
int a = str;
int b = str2;
System.out.println("请输入您想要计算的方式(+,-,*,/):");
Scanner scanner3 = new Scanner(System.in);
String zifu1 = scanner3.next();
//next()不能读取空格,nextline()可以读取
//在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单。
// 在写作业的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),
// 一种nextLine(),但是这两种方法究竟有什么区别呢?
// 首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,
// next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、
// Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。
// 完整标记的前后是与分隔模式匹配的输入信息,
// 所以next方法不能得到带空格的字符串而nextLine()方法的结束符只是Enter键,
// 即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
//nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。
// 经过验证,其他的next的方法,如double nextDouble() ,
// float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题,
// 解决的办法是:在每一个 next()、nextDouble() 、 www.gzlij.com()、nextFloat()、nextInt()
// 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉
scanner3.nextLine();
while(true) {
if (zifu1.equals("+")) { System.out.print("加法结果:");
i.func(s1, a, b);
break; } else if (zifu1.equals("-")) {
System.out.print("减法结果:");
i.func(s2, a, b);
break; } else if (zifu1.equals("*")) {
System.out.print("乘法结果:");
i.func(s3, a, b);
break;
} else if (zifu1.equals("/")) {
System.out.print("除法结果:");
i.func(s4, a, b);
break; }
else {
System.out.println("非法输入!");
break;
}
} }
} interface Ijisuanqi {
int jisuan(int a, int b); } class fun {
public void func(Ijisuanqi per, int a, int b) {
System.out.println(per.jisuan(a, b));
} } class jiafa implements Ijisuanqi {
public int jisuan(int a, int b) {
return a + b;
}
} class jianfa implements Ijisuanqi {
public int jisuan(int a, int b) {
return a - b;
}
} class chengfa implements Ijisuanqi {
public int jisuan(int a, int b) {
return a * b;
}
} class chufa implements Ijisuanqi {
public int jisuan(int a, int b) {
if (b == 0) { return -1;
} else {
return a / b;
}
}
}

运行结果:

java 优化版 用接口实现(输入两个数选择实现加减乘除运算)的更多相关文章

  1. 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实

    2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  2. 1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程

    1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  3. c 输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限 (MD花了半天时间,思路不对害死人)

    输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限 比如: 输入: 输出: 输入: 输出: #include<stdio.h> int main(void) { ...

  4. 编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示

    编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示 效果如下: 实现代码: import java.util.Arrays; import java.util.Scanne ...

  5. java课后作业 弹出窗口求两个数的加减乘除

    //计算2个数的加减乘除 谷伟华 2015/10/6package jisuan; import javax.swing.JOptionPane; public class Jiasuan { pub ...

  6. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第1节 Scanner类_4-练习一_键盘输入两个数

    导包语句其实不用我们自己去写, 选中后回车会自动的导入包 java.util 如果没有导入进来也可以,光标在关键字那里,ALT+回车 也会自动导入包 运行看一下结果:程序其实还有可以优化的地方 先输入 ...

  7. 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”

    import java.util.ArrayList; import java.util.Scanner; public class Text { @SuppressWarnings("re ...

  8. python小案例-计算输入两个数的最大公约数与最小公倍数

    # 计算最大公约数 def gcd(x,y): """ 计算最大公约数 :param x:一个正整数 :param y:一个正整数 :return:x,y的最大公约数 & ...

  9. python初学者-从键盘输入两个数判断大小

    a = int(input("a:")) b = int(input("b:")) if a > b : print(a) else : print(b)

随机推荐

  1. angular2 遗留问题

    1.angular build [2017-07-26]  a.改写js/css的引用目录的前缀(比如统一增加 /abc/xxx/*.js)  b.build时,可以控制index/js/css的生成 ...

  2. 《C++ Primer Plus》读书笔记之——处理数据

    本文旨在记录在阅读<C++ Primer Plus>第五版的过程中,一些重点的知识点,方便以后查阅.本文将不断更新...... 一.第三章 处理数据 1.无符号整型不能存储负数值,其优点是 ...

  3. January 30 2017 Week 5 Monday

    I can accept defeat but could not accept to give up. 我可以接受失败,但不能接受放弃. Fortune has not always smiled ...

  4. 实验5&期中考试后两题

    实验内容1: #include <iostream> #include <vector> #include <string> using namespace std ...

  5. 管理kafka

    一.主题操作使用kafka-topics.sh工具可以执行主题的大部分操作(配置变更部分已被启用并被移动到kafka-configs.sh工具中).我们可以用它创建.修改.删除和查看集群里的主题,要使 ...

  6. HDU 5677 ztr loves substring(Manacher+dp+二进制分解)

    题目链接:HDU 5677 ztr loves substring 题意:有n个字符串,任选k个回文子串,问其长度之和能否等于L. 题解:用manacher算法求出所有回文子串的长度,并记录各长度回文 ...

  7. 代码注释模板(把内容保存为xml文件,导入eclipse中即可)

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><templa ...

  8. 字符串拼接+和concat的区别

    +和concat都可以用来拼接字符串,但在使用上有什么区别呢,先来看看这个例子. public static void main(String[] args) { // example1 String ...

  9. Intellij IDEA 开启自动保存功能

    IntelljJ IDEA关于文件自动保存功能主要有两种方式: 切换到其他应用时保存变化(默认使能) 设置路径:Settings >> Apperance & Behavior & ...

  10. (二)给Centos配置网络以及使用xshell远程连接Centos

    好吧,我对网络协议以及ip配置知识的匮乏,让我在这里折腾了将近一天才搞定.可以说基本上网上遇到的问题我都遇到了.在这里,记下正确的步骤来给Centos配置网络.希望以后少走弯路. 首先我要说明的是,我 ...