看似简单的一道题,实际很复杂,我只写了整数的计算,其他的你先自己先试着写写吧,
我的思路是对你输入的表达式进行判断,并进行相应的计算,关键是判断的过程十分的麻烦.代码没有优化过,有人愿意的话,提出自己的改进意见,小数没顾上写.
(关于运行方面,我增加了死循环可以多次键盘录入.)
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编辑过]