![]() |
#2
纵横阳仔2017-04-01 08:40
看似简单的一道题,实际很复杂,我只写了整数的计算,其他的你先自己先试着写写吧,
我的思路是对你输入的表达式进行判断,并进行相应的计算,关键是判断的过程十分的麻烦.代码没有优化过,有人愿意的话,提出自己的改进意见,小数没顾上写. (关于运行方面,我增加了死循环可以多次键盘录入.) import java.util.Scanner; /* * 1.输入一个数学计算表达式,如:1+2 * 2.然后输出计算后的结果:1+2=3 * 3.这里计算表达式只计算一次即可,可以使用加减乘除任意一个,可以进行小数运算。 * * */ public class Test1 { public static void main(String[] args) { // 键盘录入这个表达式,为了方便采用字符串的形式 Scanner sc = new Scanner(System.in); Scanner sc2 = new Scanner(System.in); // 调用方法 // 对输入的字符串进行判断 String flag = "Y"; while (flag.equalsIgnoreCase("Y")) { // 关于+出现次数的记录 int jiaCount = 0; // 关于-出现次数的记录 int jianCount = 0; // 关于*出现次数的记录 int chengCount = 0; // 关于/出现次数的记录 int chuCount = 0; boolean b = true; System.out.println("请输入一个算术表达式"); String s = sc.nextLine(); for (int i = 0; i < s.length(); i++) { String s1 = s.substring(i, i + 1); if (!(s1.matches("[0-9]") || s1.matches("\\+") || s1.matches("\\-") || s1.matches("\\*") || s1.matches("\\/") || s1.matches("\\."))) { System.out.println("你输入的表达式有误!!!"); b = false; break; } else if (s1.equals("+")) { jiaCount++; } else if (s1.equals("-")) { jianCount++; } else if (s1.equals("*")) { chengCount++; } else if (s1.equals("/")) { chuCount++; } } if (b) { if (chengCount > 1 || chuCount > 1 || s.contains("+++") || s.contains("---") || jiaCount > 3 || jianCount > 3) { System.out.println("你输入的表达式有误!!!"); } else { method(s); } } System.out.println("是否还要继续?是/否(Y/按其它任意键键退出)"); flag = sc2.nextLine(); } } private static void method(String s) { // 整数计算 if (!s.contains(".")) { intJiSuan(s); } } // 关于整数的运算 private static void intJiSuan(String s) { // 加法计算 if (s.contains("+") && s.startsWith("+")) { String[] ss = s.split("\\+", 3); int sum = 0; for (int i = 1; i < ss.length; i++) { sum += Integer.valueOf(ss[i]); } System.out.println(sum); } else if (s.contains("+")) { String[] ss = s.split("\\+", 2); int sum = 0; for (int i = 0; i < ss.length; i++) { sum += Integer.valueOf(ss[i]); } System.out.println(sum); } // 减法计算 if (s.contains("-") && !s.contains("+") && !s.contains("*")) { if (s.startsWith("-")) { String[] ss = s.split("\\-", 3); System.out.println(-Integer.valueOf(ss[1]) - Integer.valueOf(ss[2])); } else { String[] ss = s.split("\\-", 2); System.out.println(Integer.valueOf(ss[0]) - Integer.valueOf(ss[1])); } } // 乘法计算 if (s.contains("*")) { String[] ss = s.split("\\*", 2); System.out.println(Integer.valueOf(ss[0]) * Integer.valueOf(ss[1])); } // 除法计算 if (s.contains("/")) { String[] ss = s.split("\\/", 2); if (!s.endsWith("/0")) { if (s.startsWith("0/")) { // 如果0作为除数,结果为零 System.out.println(0); } else if (Integer.valueOf(ss[0]) % Integer.valueOf(ss[1]) == 0) { // 如果恰好可以整除,结果为整数 System.out.println(Integer.valueOf(ss[0]) / Integer.valueOf(ss[1])); } else { // 否则结果为double类型的值 System.out.println((double) Integer.valueOf(ss[0]) / Integer.valueOf(ss[1])); } } else { System.out.println("0不能作为除数!!!"); } } } } [此贴子已经被作者于2017-4-1 22:00编辑过] |
1.输入一个数学计算表达式,如:1+2
2.然后输出计算后的结果:1+2=3
3.这里计算表达式只计算一次即可,可以使用加减乘除任意一个,可以进行小数运算。