计算器输入计算式输出结果
来源:互联网 发布:源码包apache 编辑:程序博客网 时间:2024/05/01 22:48
这个比较简单,只能实现两个数的加减乘除运算,后面那个虽然实现了输入式子输出结果,但是比较麻烦。
import java.util.Scanner;public class Calculator { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个算式(加:+减:-乘:*除:/)[结束请按q\\Q]"); String s = sc.nextLine(); do { for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if(c=='+') { add( Double.parseDouble(s.substring(0,i)),Double.parseDouble(s.substring(i+1,s.length()))); }else if(c=='-') { sub( Double.parseDouble(s.substring(0,i)),Double.parseDouble(s.substring(i+1,s.length()))); }else if(c=='*') { mul( Double.parseDouble(s.substring(0,i)),Double.parseDouble(s.substring(i+1,s.length()))); }else if(c=='/') { div( Double.parseDouble(s.substring(0,i)),Double.parseDouble(s.substring(i+1,s.length()))); } } s = sc.nextLine(); }while(!s.equalsIgnoreCase("q")); sc.close(); } //+-*/方法 public static void add(double a,double b) { System.out.println("="+(a+b)); } public static void sub(double a,double b) { System.out.println("="+(a-b)); } public static void mul(double a,double b) { System.out.println("="+(a*b)); } public static void div(double a,double b) { System.out.println("="+(a/b)); }}
运行结果:
请输入一个算式(加:+减:-乘:*除:/)[结束请按q\Q]3+3=6.05/3=1.66666666666666679*0.3=2.69999999999999973*5=15.0Q
然后我想了想能不能实现输入个运算式输出结果呢,经过想了好几个小时,终于实现了,由于刚学了十天,可能做的比较复杂了。毕竟好多java自带的API都还不知道。然而这个还不能实现括号输入,再想想,嘻嘻
import java.util.ArrayList;import java.util.Scanner;public class CalculatorAnother { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个算式(加:+减:-乘:*除:/)[结束请按q\\Q]"); String s = sc.nextLine(); //循环输入算式 do { //存放+-*/运算符 ArrayList<Integer> arrYsf = new ArrayList<Integer>(); //存放+-运算符 ArrayList<Integer> arrJj = new ArrayList<Integer>(); //存放*/运算符 ArrayList<Integer> arrCc = new ArrayList<Integer>(); //存放所有的数字 ArrayList<Double> arrDouble = new ArrayList<Double>(); char[] cs = s.toCharArray(); boolean b = false; double a; //遍历字符串,把是运算符的索引存进arrYsf里面 for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if(c=='+'||c=='-'||c=='*'||c=='/') { arrYsf.add(i); } } //遍历字符串,把加减法和乘除法分别存进arrJj和arrCc数组里面 for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if(c=='+'||c=='-') { arrJj.add(i); }else if(c=='*'||c=='/'){ arrCc.add(i); } } //得到所有的数并存进arrDouble for (int j = 0; j <= arrYsf.size(); j++) { if(j==0) { arrDouble.add(Double.parseDouble(s.substring(0,arrYsf.get(j)))); } else if(j==arrYsf.size()){ arrDouble.add(Double.parseDouble(s.substring(arrYsf.get(j-1)+1,s.length()))); } else { arrDouble.add(Double.parseDouble(s.substring(arrYsf.get(j-1)+1,arrYsf.get(j)))); } } //打印arrDouble(测试用) /*for (int i = 0; i < arrDouble.size(); i++) { System.out.println(arrDouble.get(i)); }*/ //循环计算乘除法,每次计算一个乘法或者除法 do { b = false; if(arrCc.isEmpty()) { break; }else { //运算乘除法,把结果放回arrDouble数组替换已经运算的数字,并去除arrCc已经使用的元素 for (int j = 0; j < arrYsf.size(); j++) { if(arrYsf.get(j)==arrCc.get(0)) { if(cs[arrYsf.get(j)]=='*') { a = mul(arrDouble.get(j),arrDouble.get(j+1)); arrDouble.remove(j); arrDouble.remove(j); arrDouble.add(j, a); arrYsf.remove(j); arrCc.remove(0); b = true; break; }else if(cs[arrYsf.get(j)]=='/') { a = div(arrDouble.get(j),arrDouble.get(j+1)); arrDouble.remove(j); arrDouble.remove(j); arrDouble.add(j, a); arrYsf.remove(j); arrCc.remove(0); b = true; break; } } } } }while(b); //循环计算加减法,每次计算一个乘法或者加法 do { b = false; //运算加减法,把结果放回arrDouble数组替换已经参与运算的数字,并去除arrJj已经使用的元素 if(arrJj.isEmpty()) { break; }else { for (int j = 0; j < arrYsf.size(); j++) { if(arrYsf.get(j)==arrJj.get(0)) { if(cs[arrYsf.get(j)]=='+') { a = add(arrDouble.get(j),arrDouble.get(j+1)); arrDouble.remove(j); arrDouble.remove(j); arrDouble.add(j, a); arrYsf.remove(j); arrJj.remove(0); b = true; break; }else if(cs[arrYsf.get(j)]=='-') { a = sub(arrDouble.get(j),arrDouble.get(j+1)); arrDouble.remove(j); arrDouble.remove(j); arrDouble.add(j, a); arrYsf.remove(j); arrJj.remove(0); b = true; break; } } } } }while(b); System.out.println("="+arrDouble.get(0)); s = sc.nextLine(); }while(!s.equalsIgnoreCase("q")); sc.close(); } public static double add(double a,double b) { return a+b; } public static double sub(double a,double b) { return a-b; } public static double mul(double a,double b) { return a*b; } public static double div(double a,double b) { return a/b; }}
运行结果:
请输入一个算式(加:+减:-乘:*除:/)[结束请按q\Q]5*5+5-3-2/1+6*1-6=25.05+5=10.05+5+5+5+5+5+5+5=40.0q
阅读全文
0 0
- 计算器输入计算式输出结果
- 输入字符串计算式,输出结果
- 输入算式求结果
- 华为笔试 四川大学 2013.09 第三题:输入计算式得结果 http://stornado.cn
- 简单的计算器 ~~ 呼呼 支持 +-/* () 运算 输入 算式 就得到结果 栈 ~~
- 计算式
- 计161平日题目汇总--Problem E: 输入两个整数,进行四则运算并输出结果
- 字符转计算式
- 人生的奇妙计算式
- 一种PI的计算式
- 161002计算式和循环体
- 求算式结果
- 输入一个字符串表达式,输出计算结果
- 美团面试题 输入任意表达式输出结果
- json 安输入顺序输出结果
- loner_li 机试题 编写一个简单的计算器实现加减乘除:输入两个数字和一个运算符号,输出结果(注意容错性)
- query 字段页签中的计算式
- query 字段页签中的计算式
- 数组的反转的简单方法
- Could not get lock /var/lib/dpkg/lock
- Java高级之Socket,反射
- 机器人领域牛人和研究组列表
- 动手实践Makefile之wildcard的使用
- 计算器输入计算式输出结果
- thinking in java 14章 类型信息
- 2017.12.4 刘明春第一天总结
- Java反射之获取私有公共的属性和方法
- JavaSE基础知识学习—集合
- 关于keyfind的优化
- [转][PyTorch指定GPU
- jsp、http请求
- Xenomai在Ubuntu中的安装-实时内核更换