【求助】求高手将程序改为有输出计算过程的程序,并优化程序,谢谢! 本帖最后由 worlboy 于 2012-04-25 08:40:13 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.util.Scanner;public class Buhui {public int Str = 0;public int br = 0;// 追加默认构造器private Buhui() {}public static void main(String[] args) { Buhui sObject = new Buhui(); Scanner input = new Scanner(System.in); do { System.out.println("请输入四则运算式:"); String numberString = input.next().trim(); if (sObject.PanduanShuRu(numberString) == false) { System.out.println("您输入有误,请正确输入!"); } else { System.out.println(sObject.PanduanKuohao(numberString)); } } while (true);}// 判断是否正确输入运算方式private boolean PanduanShuRu(String messString) {boolean ispass = false;boolean operationIspass = true;int ai = 0;char[] IsString = messString.toCharArray();int num1 = 0;int num2 = 0;for (int i = 0; i < IsString.length; i++) {if ('(' == IsString[i])num1++;if (')' == IsString[i])num2++;if ('/' == IsString[i] && IsString[i + 1] == '0')operationIspass = false;if (IsString[i] == '+' || IsString[i] == '-' || IsString[i] == '*'|| IsString[i] == '/')ai++;if (i == IsString.length - 1)if (ai == 0)num2++;}if (operationIspass)if (num1 == num2)ispass = true;return ispass;}private String PanduanKuohao(String str) {String result = str;char[] numberString = str.toCharArray();int IndexStart = 0;int EndStart = 0;for (int i = 0; i < numberString.length; i++) {if ('(' == numberString[i]) {IndexStart = i;}if (')' == numberString[i]) {EndStart = i;result = result.substring(IndexStart + 1, EndStart);result = str.substring(0, IndexStart)+ NoKuohao(result, '*', '/')+ str.substring(EndStart + 1, str.length());return PanduanKuohao(result);}if (i == numberString.length - 1)if (EndStart == 0)break;}result = NoKuohao(str, '*', '/');return result;}// 不带括号的四则运算private String NoKuohao(String operationNumber, char a, char b) {String mess = operationNumber;char[] stringOperation = mess.toCharArray();for (int i = 0; i < stringOperation.length; i++) {if (stringOperation[i] == a || stringOperation[i] == b) {if (i != 0) {double num1 = JieQu1(mess.substring(0, i));int frontPosition = Str;double num2 = JieQu2(mess.substring(i + 1,stringOperation.length));int backPosition = Str;String IndexMess = mess.substring(0, i - frontPosition + 1);String IndexResult = "";if (IndexMess.indexOf('+') == -1&& IndexMess.indexOf('*') == -1&& IndexMess.indexOf('/') == -1&& IndexMess.lastIndexOf('-') == -1)IndexMess = "";if (IndexMess != "")IndexResult = IndexMess.lastIndexOf('-') == IndexMess.length() - 1 ? IndexMess.substring(0, i- frontPosition) : IndexMess;mess = IndexResult+ JiSuanString("" + stringOperation[i], num1, num2)+ mess.substring(i + backPosition + 1);if (mess.lastIndexOf('-') == 0 && mess.indexOf('+') == -1&& mess.indexOf('*') == -1&& mess.indexOf('/') == -1) {break;}return NoKuohao(mess, a, b);// 1+7-5+89/3+4-6*8/2+4-6} elsecontinue;}if (i == stringOperation.length - 1) {if (mess.indexOf('+') != -1 || mess.indexOf('-') != -1)return NoKuohao(mess, '+', '-');break;}}return mess;}// 截取第二个数private double JieQu2(String str) {double a = 0;int InrerceIndex = 0;char[] stringOperation = str.toCharArray();boolean ispas = false;for (int i = 0; i < stringOperation.length; i++) {switch (stringOperation[i]) {case '*':case '/':case '+':case '-':InrerceIndex = i;if (i != 0)ispas = true;break;default:break;}if (ispas)break;}if (InrerceIndex == 0) {a = Double.parseDouble(str);Str = str.length();if (ispas)Str++;} else {a = Double.parseDouble(str.substring(0, InrerceIndex));Str = str.substring(0, InrerceIndex).length();}return a;}// 截取第一个数private double JieQu1(String str) {double a = 0;int InrerceIndex = 0;boolean temp = false;char[] stringOperation = str.toCharArray();for (int i = stringOperation.length - 1; i >= 0; i--) {switch (stringOperation[i]) {case '*':case '/':case '+':case '-':InrerceIndex = i;temp = true;break;default:break;}if (temp)break;}if (InrerceIndex == 0) {a = Double.parseDouble(str);Str = str.length();} else {a = Double.parseDouble(str.substring(InrerceIndex, str.length()));Str = str.substring(InrerceIndex, str.length()).length();}return a;}// 计算结果private double JiSuanString(String operation, double num1, double num2) { double sum = 0; if (operation.equals("*")){ sum = num1 * num2; System.out.println(num1+"*"+num2+"="+sum); } if (operation.equals("-")){ sum = num1 - num2; System.out.println(num1+"-"+num2+"="+sum); } if (operation.equals("/")){ sum = num1 / num2; System.out.println(num1+"/"+num2+"="+sum); } if (operation.equals("+")){ sum = num1 + num2; System.out.println(num1+"+"+num2+"="+sum); } return sum;}} JDBC连接MYSQL为什么总是提示驱动找不到啊 SQL语句 多线程中只想初始化某个类一次而且效率不受影响,怎么实现 语法分析器 如何用JAVA代码备份数据库 请问,如果我们用工具开发,那Ant这个东西还有用吗? 问两个JAVA入门级的问题 我通过JDBC连接MYSQL输入中文出现问题,请指教! 帮我看看这个警告是什么意思,来者有分!! 在linux中怎么显示中文文件和文件名。我已经安装了简体中文。 关于GridBagLayout的问题。 怎么返回string数组
public int Str = 0;
public int br = 0;// 追加默认构造器
private Buhui() {}public static void main(String[] args) {
Buhui sObject = new Buhui();
Scanner input = new Scanner(System.in);
do {
System.out.println("请输入四则运算式:");
String numberString = input.next().trim();
if (sObject.PanduanShuRu(numberString) == false) {
System.out.println("您输入有误,请正确输入!");
} else {
System.out.println(sObject.PanduanKuohao(numberString));
}
} while (true);
}// 判断是否正确输入运算方式
private boolean PanduanShuRu(String messString) {
boolean ispass = false;
boolean operationIspass = true;
int ai = 0;
char[] IsString = messString.toCharArray();
int num1 = 0;
int num2 = 0;
for (int i = 0; i < IsString.length; i++) {if ('(' == IsString[i])
num1++;
if (')' == IsString[i])
num2++;if ('/' == IsString[i] && IsString[i + 1] == '0')
operationIspass = false;if (IsString[i] == '+' || IsString[i] == '-' || IsString[i] == '*'
|| IsString[i] == '/')
ai++;if (i == IsString.length - 1)
if (ai == 0)
num2++;
}
if (operationIspass)
if (num1 == num2)
ispass = true;
return ispass;
}private String PanduanKuohao(String str) {
String result = str;
char[] numberString = str.toCharArray();
int IndexStart = 0;
int EndStart = 0;
for (int i = 0; i < numberString.length; i++) {
if ('(' == numberString[i]) {IndexStart = i;
}
if (')' == numberString[i]) {EndStart = i;result = result.substring(IndexStart + 1, EndStart);result = str.substring(0, IndexStart)
+ NoKuohao(result, '*', '/')
+ str.substring(EndStart + 1, str.length());return PanduanKuohao(result);
}
if (i == numberString.length - 1)
if (EndStart == 0)
break;
}result = NoKuohao(str, '*', '/');
return result;
}// 不带括号的四则运算
private String NoKuohao(String operationNumber, char a, char b) {String mess = operationNumber;
char[] stringOperation = mess.toCharArray();for (int i = 0; i < stringOperation.length; i++) {if (stringOperation[i] == a || stringOperation[i] == b) {
if (i != 0) {double num1 = JieQu1(mess.substring(0, i));int frontPosition = Str;double num2 = JieQu2(mess.substring(i + 1,
stringOperation.length));int backPosition = Str;String IndexMess = mess.substring(0, i - frontPosition + 1);
String IndexResult = "";if (IndexMess.indexOf('+') == -1
&& IndexMess.indexOf('*') == -1
&& IndexMess.indexOf('/') == -1
&& IndexMess.lastIndexOf('-') == -1)
IndexMess = "";
if (IndexMess != "")
IndexResult = IndexMess.lastIndexOf('-') == IndexMess
.length() - 1 ? IndexMess.substring(0, i
- frontPosition) : IndexMess;mess = IndexResult
+ JiSuanString("" + stringOperation[i], num1, num2)
+ mess.substring(i + backPosition + 1);if (mess.lastIndexOf('-') == 0 && mess.indexOf('+') == -1
&& mess.indexOf('*') == -1
&& mess.indexOf('/') == -1) {
break;
}return NoKuohao(mess, a, b);// 1+7-5+89/3+4-6*8/2+4-6
} else
continue;
}
if (i == stringOperation.length - 1) {if (mess.indexOf('+') != -1 || mess.indexOf('-') != -1)
return NoKuohao(mess, '+', '-');
break;
}
}
return mess;
}// 截取第二个数
private double JieQu2(String str) {
double a = 0;
int InrerceIndex = 0;
char[] stringOperation = str.toCharArray();
boolean ispas = false;
for (int i = 0; i < stringOperation.length; i++) {
switch (stringOperation[i]) {
case '*':
case '/':
case '+':
case '-':
InrerceIndex = i;
if (i != 0)
ispas = true;
break;
default:
break;
}
if (ispas)
break;
}if (InrerceIndex == 0) {
a = Double.parseDouble(str);
Str = str.length();
if (ispas)
Str++;} else {
a = Double.parseDouble(str.substring(0, InrerceIndex));Str = str.substring(0, InrerceIndex).length();
}
return a;
}// 截取第一个数
private double JieQu1(String str) {
double a = 0;
int InrerceIndex = 0;
boolean temp = false;
char[] stringOperation = str.toCharArray();
for (int i = stringOperation.length - 1; i >= 0; i--) {
switch (stringOperation[i]) {
case '*':
case '/':case '+':
case '-':
InrerceIndex = i;
temp = true;
break;
default:
break;
}
if (temp)
break;
}if (InrerceIndex == 0) {
a = Double.parseDouble(str);
Str = str.length();} else {
a = Double.parseDouble(str.substring(InrerceIndex, str.length()));Str = str.substring(InrerceIndex, str.length()).length();
}
return a;
}// 计算结果
private double JiSuanString(String operation, double num1, double num2) {
double sum = 0;
if (operation.equals("*")){
sum = num1 * num2;
System.out.println(num1+"*"+num2+"="+sum);
}
if (operation.equals("-")){
sum = num1 - num2;
System.out.println(num1+"-"+num2+"="+sum);
}
if (operation.equals("/")){
sum = num1 / num2;
System.out.println(num1+"/"+num2+"="+sum);
}
if (operation.equals("+")){
sum = num1 + num2;
System.out.println(num1+"+"+num2+"="+sum);
}
return sum;
}
}