📄 expcalframe.java
字号:
b[n] = b[n + 1];
b[n + 1] = ' ';
}
else {
bFlag = false;
}
}
} //while (i < sarr.length)
while (m > 0) {
a[m - 1] = CalculateSimple(a[m - 1], a[m], b[n]);
a[m] = 0;
b[n] = ' ';
m = m - 1;
n = n - 1;
}
if (n != -1) {
JOptionPane.showMessageDialog(this, "表达式有误!" + s);
System.exit(0);
}
else {
return a[0];
}
return 0;
}
/**删除表达式中的空格*/
public String StrDelBlank(String sExp) {
int i;
char[] sarr = sExp.toCharArray();
String strResult;
StringBuffer sb = new StringBuffer(sarr.length);
for (i = 0; i < sarr.length; i ++ ) {
if (sarr[i] != ' ') {
sb.append(sarr[i]);
}
}
strResult = sb.toString().trim();
return strResult;
}
/**替换表达式中的函数*/
public String ReplaceFunction(String sExp) {
int i, iFirst, iLeftBracket, iRightBracket;
String strResult, strFunction, strSub, s;
String strFuncFirst = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_";
String strOpr = "+-*/^";
boolean bNotEqu;
double dResult;
char[] sarr = sExp.toCharArray();
strResult = "";
s = sExp;
i = 0;
while (i < sarr.length) {
if (strFuncFirst.indexOf(sarr[i]) > -1) {
strFunction = "";
iFirst = i;
while((i < sarr.length) && (strOpr.indexOf(sarr[i]) < 0)) {
if (sarr[i] == ')') {
JOptionPane.showMessageDialog(this, "表达式缺左括号!");
System.exit(0);
}
if (sarr[i] != '(') {
strFunction = strFunction + sarr[i];
i = i + 1;
}
else {
iLeftBracket = 1;
iRightBracket = 0;
strSub = "";
bNotEqu = true;
i = i + 1;
while( bNotEqu && i < sarr.length) {
strSub = strSub + sarr[i];
if (sarr[i] == '(') {
iLeftBracket = iLeftBracket + 1;
}
if (sarr[i] == ')') {
iRightBracket = iRightBracket + 1;
}
if (iLeftBracket == iRightBracket) {
bNotEqu = false;
}
i = i + 1;
}
if (bNotEqu) {
JOptionPane.showMessageDialog(this, "表达式缺右括号!");
System.exit(0);
}
i = i - 1;
if (strSub.length() > 0) {
strSub = strSub.substring(0, strSub.length() - 1);
}
dResult = CalculateFuction(strFunction, strSub);
s = s.substring(0, iFirst) + String.valueOf(dResult) + s.substring(i + 1);
sarr = s.toCharArray();
i = iFirst + String.valueOf(dResult).length();
}
}
}
i = i + 1;
}
strResult = s;
return strResult;
}
/**检查表达式是否有非法字符*/
public boolean CheckExpCharValid(String sExp) {
int i = 0;
String strValidChar = "0123456789.+-*/()^";
char[] strExps = sExp.toCharArray();
for (i = 0; i < strExps.length; i ++) {
if (strValidChar.indexOf(String.valueOf(strExps[i])) < 0) {
JOptionPane.showMessageDialog(this, "存在非法字符!表达式:" + sExp + ",位置:" + String.valueOf(i));
return false;
}
}
return true;
}
/**检查表达式左右括号是否匹配*/
public boolean CheckExpBracket(String sExp) {
int i, iLeftBracket, iRightBracket;
char[] s = sExp.toCharArray();
boolean bNotEqu;
if (s.length == 0) {
return true;
}
i = 0;
while (i < s.length) {
if (s[i] == ')') {
JOptionPane.showMessageDialog(this, "表达式缺左括号!");
return false;
}
if (s[i] == '(') {
bNotEqu = true;
iRightBracket = 0;
iLeftBracket = 0;
while (bNotEqu && (i < s.length)) {
if (s[i] == ')') {
iRightBracket = iRightBracket + 1;
}
if (s[i] == '(') {
iLeftBracket = iLeftBracket + 1;
}
if (iLeftBracket == iRightBracket) {
bNotEqu = false;
}
i = i + 1;
}
if (bNotEqu) {
JOptionPane.showMessageDialog(this, "表达式缺右括号!");
return false;
}
}
i = i + 1;
}
return true;
}
/**函数求值*/
public double CalculateFuction(String sFunctionName, String sParams ) {
System.out.println(sFunctionName + "(" + sParams + ")");
String strFuncName = sFunctionName;
double dResult = 0;
//ABS; SQRT; SIN; COS; TAN; PI; EXP; LN
if (strFuncName.toUpperCase().equals("ABS")) {
dResult = Math.abs(CalculateExp(sParams));
}
else if (strFuncName.toUpperCase().equals("SQRT")) {
dResult = Math.sqrt(CalculateExp(sParams));
}
else if (strFuncName.toUpperCase().equals("SIN")) {
dResult = Math.sin(CalculateExp(sParams));
}
else if (strFuncName.toUpperCase().equals("COS")) {
dResult = Math.cos(CalculateExp(sParams));
}
else if (strFuncName.toUpperCase().equals("TAN")) {
dResult = Math.tan(CalculateExp(sParams));
}
else if (strFuncName.toUpperCase().equals("PI")) {
dResult = Math.PI;
}
else if (strFuncName.toUpperCase().toString() == "EXP") {
dResult = Math.exp(CalculateExp(sParams));
}
else if (strFuncName.toUpperCase().toString() == "LN") {
dResult = Math.log(CalculateExp(sParams));
}
return dResult;
}
/**计算简单表达式,二目运算*/
public double CalculateSimple(double dVar1, double dVar2, char chOpr ) {
System.out.println(String.valueOf(dVar1) + String.valueOf(chOpr) + String.valueOf(dVar2));
double dResult = 0;
String strOprs = "+-*/^";
if (strOprs.indexOf(String.valueOf(chOpr)) < 0) {
JOptionPane.showMessageDialog(this, "无效的操作运算符!");
System.exit(0);
}
switch(chOpr) {
case '+': {
dResult = dVar1 + dVar2;
break;
}
case '-': {
dResult = dVar1 - dVar2;
break;
}
case '*': {
dResult = dVar1 * dVar2;
break;
}
case '/': {
if (dVar2 == 0) {
JOptionPane.showMessageDialog(this, "除0错误:" + String.valueOf(dVar1) + String.valueOf(chOpr) + String.valueOf(dVar2));
System.exit(0);
}
dResult = dVar1 / dVar2;
break;
}
case '^': {
try {
dResult = Math.pow(dVar1, dVar2);
}
catch (Exception e) {
JOptionPane.showMessageDialog(this, "表达式有误:" + String.valueOf(dVar1) + String.valueOf(chOpr) + String.valueOf(dVar2));
System.exit(0);
}
break;
}
}
return dResult;
}
}
class ExpCalFrame_btnCal_actionAdapter
implements ActionListener {
private ExpCalFrame adaptee;
ExpCalFrame_btnCal_actionAdapter(ExpCalFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnCal_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -