IO问题,请高手帮忙!!! 从文件 D:\1.txt 里面读取一个算术表达式 1+2*3/4-{4+5/3*[6+4]}+3怎么求出它的结果呀???急急....谢谢!!!!!!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package p060815;import java.io.*;import java.util.*;public class ComputeExpression { public ComputeExpression() { } public static String readFromFile(String filename){ String rtn=null; try{ BufferedReader in = new BufferedReader( new FileReader(filename)); rtn=in.readLine(); in.close(); }catch(Exception ex){ ex.printStackTrace(); } return rtn; } public static String processParentheses(String src){ src=src.replace('{','('); src=src.replace('[','('); src=src.replace(']',')'); src=src.replace('}',')'); return src; } public static int compute(String exp){ List<Integer> num=new ArrayList<Integer>(); List<Character> op=new ArrayList<Character>(); byte[] e=exp.getBytes(); int pos=0; for (int i=0;i<e.length;i++){ if (e[i]=='('){ for (int j=e.length-1;j>i;j--){ if (e[j]==')'){ num.add(compute(exp.substring(i+1,j))); i=j; pos=-1; break; } } } else if(e[i]=='+'||e[i]=='-'||e[i]=='*'||e[i]=='/'){ if (pos!=-1){ num.add(Integer.parseInt(exp.substring(pos, i).trim())); } op.add((char)e[i]); pos=i+1; } } if (pos<e.length&&pos!=-1){ num.add(Integer.parseInt(exp.substring(pos,e.length).trim())); } System.out.print(num.get(0)); for (int i=0;i<op.size();i++){ System.out.print(op.get(i)); System.out.print(num.get(i+1)); } for (int i=0;i<op.size();i++){ if (op.get(i).equals(new Character('*'))){ Integer i1=num.get(i); Integer i2=num.get(i+1); num.set(i,i1.intValue()*i2.intValue()); num.remove(i+1); op.remove(i); i--; } else if (op.get(i).equals(new Character('/'))){ Integer i1 = num.get(i); Integer i2 = num.get(i + 1); num.set(i, i1.intValue() / i2.intValue()); num.remove(i + 1); op.remove(i); i--; } } for (int i=0;i<op.size();i++){ if (op.get(i).equals(new Character('+'))){ Integer i1=num.get(i); Integer i2=num.get(i+1); num.set(i,i1.intValue()+i2.intValue()); num.remove(i+1); op.remove(i); i--; } else if (op.get(i).equals(new Character('-'))){ Integer i1 = num.get(i); Integer i2 = num.get(i + 1); num.set(i, i1.intValue() - i2.intValue()); num.remove(i + 1); op.remove(i); i--; } } System.out.println("="+num.get(0)); return num.get(0).intValue(); } public static void main(String[] args) { String exp=readFromFile("f:\\temp\\1.txt"); exp=processParentheses(exp); System.out.println(exp+"="+compute(exp)); }} sorry,有个地方我疏忽了import java.io.*;import java.util.*;public class ComputeExpression { public ComputeExpression() { } public static String readFromFile(String filename){ String rtn=null; try{ BufferedReader in = new BufferedReader( new FileReader(filename)); rtn=in.readLine(); in.close(); }catch(Exception ex){ ex.printStackTrace(); } return rtn; } public static String processParentheses(String src){ src=src.replace('{','('); src=src.replace('[','('); src=src.replace(']',')'); src=src.replace('}',')'); return src; } public static int compute(String exp){ List<Integer> num=new ArrayList<Integer>(); List<Character> op=new ArrayList<Character>(); byte[] e=exp.getBytes(); int pos=0; for (int i=0;i<e.length;i++){ if (e[i]=='('){ int count=0; for (int j=i+1;j<e.length;j++){ if (e[j]==')'&&count==0){ num.add(compute(exp.substring(i+1,j))); i=j; pos=-1; break; }else if(e[j]==')'){ count--; }else if(e[j]=='('){ count++; } } } else if(e[i]=='+'||e[i]=='-'||e[i]=='*'||e[i]=='/'){ if (pos!=-1){ num.add(Integer.parseInt(exp.substring(pos, i).trim())); } op.add((char)e[i]); pos=i+1; } } if (pos<e.length&&pos!=-1){ num.add(Integer.parseInt(exp.substring(pos,e.length).trim())); } System.out.print(num.get(0)); for (int i=0;i<op.size();i++){ System.out.print(op.get(i)); System.out.print(num.get(i+1)); } for (int i=0;i<op.size();i++){ if (op.get(i).equals(new Character('*'))){ Integer i1=num.get(i); Integer i2=num.get(i+1); num.set(i,i1.intValue()*i2.intValue()); num.remove(i+1); op.remove(i); i--; } else if (op.get(i).equals(new Character('/'))){ Integer i1 = num.get(i); Integer i2 = num.get(i + 1); num.set(i, i1.intValue() / i2.intValue()); num.remove(i + 1); op.remove(i); i--; } } for (int i=0;i<op.size();i++){ if (op.get(i).equals(new Character('+'))){ Integer i1=num.get(i); Integer i2=num.get(i+1); num.set(i,i1.intValue()+i2.intValue()); num.remove(i+1); op.remove(i); i--; } else if (op.get(i).equals(new Character('-'))){ Integer i1 = num.get(i); Integer i2 = num.get(i + 1); num.set(i, i1.intValue() - i2.intValue()); num.remove(i + 1); op.remove(i); i--; } } System.out.println("="+num.get(0)); return num.get(0).intValue(); } public static void main(String[] args) { String exp=readFromFile("f:\\temp\\1.txt"); exp=processParentheses(exp); System.out.println(exp+"="+compute(exp)); }} hehe, hbwhwang 够狠,连程序都写出来了!我光想偷懒的办法了,想着加载个 script 引擎(比如 Rhino),然后让它算 :) maquan('ma:kju) :你都穿5个裤衩了,我还不努力,那--还有天理吗?还有王法吗? 同意maquan('ma:kju), 哈哈, 要是我就用JavaScript的Eval 我试过hbwhwang 的代码了,果然好用,效率真高 java的强制转换是如何实现的 除了sun以外,不同厂商实现的jdk/jre,有版本的说法么? 关于FileIO的基础问题,请指教。 请教大侠关于java与Cloudscape的驱动和连接 这个问题困扰了我两天,哪里出了问题? 判断输入的日期是否合法,及润月问题(个人编写。仅供参考。如果有更好的思路敬请指教) 一个从C++转学JAVA的初学者的问题,请各位有时间看看,都是一些入门的问题,不过很钻牛角尖,可能我理解的不深? ▲▲▲▲▲Vector▲▲▲▲▲ 问题 给分10 怎么样用JAVA调用有参数的EXE java怎样等比缩放截图
import java.util.*;public class ComputeExpression {
public ComputeExpression() {
}
public static String readFromFile(String filename){
String rtn=null;
try{
BufferedReader in = new BufferedReader( new FileReader(filename));
rtn=in.readLine();
in.close();
}catch(Exception ex){
ex.printStackTrace();
}
return rtn;
}
public static String processParentheses(String src){
src=src.replace('{','(');
src=src.replace('[','(');
src=src.replace(']',')');
src=src.replace('}',')');
return src;
}
public static int compute(String exp){
List<Integer> num=new ArrayList<Integer>();
List<Character> op=new ArrayList<Character>();
byte[] e=exp.getBytes();
int pos=0;
for (int i=0;i<e.length;i++){
if (e[i]=='('){
for (int j=e.length-1;j>i;j--){
if (e[j]==')'){
num.add(compute(exp.substring(i+1,j)));
i=j;
pos=-1;
break;
}
}
} else if(e[i]=='+'||e[i]=='-'||e[i]=='*'||e[i]=='/'){
if (pos!=-1){
num.add(Integer.parseInt(exp.substring(pos, i).trim()));
}
op.add((char)e[i]);
pos=i+1;
}
}
if (pos<e.length&&pos!=-1){
num.add(Integer.parseInt(exp.substring(pos,e.length).trim()));
}
System.out.print(num.get(0));
for (int i=0;i<op.size();i++){
System.out.print(op.get(i));
System.out.print(num.get(i+1));
}
for (int i=0;i<op.size();i++){
if (op.get(i).equals(new Character('*'))){
Integer i1=num.get(i);
Integer i2=num.get(i+1);
num.set(i,i1.intValue()*i2.intValue());
num.remove(i+1);
op.remove(i);
i--;
} else if (op.get(i).equals(new Character('/'))){
Integer i1 = num.get(i);
Integer i2 = num.get(i + 1);
num.set(i, i1.intValue() / i2.intValue());
num.remove(i + 1);
op.remove(i);
i--;
}
} for (int i=0;i<op.size();i++){
if (op.get(i).equals(new Character('+'))){
Integer i1=num.get(i);
Integer i2=num.get(i+1);
num.set(i,i1.intValue()+i2.intValue());
num.remove(i+1);
op.remove(i);
i--;
} else if (op.get(i).equals(new Character('-'))){
Integer i1 = num.get(i);
Integer i2 = num.get(i + 1);
num.set(i, i1.intValue() - i2.intValue());
num.remove(i + 1);
op.remove(i);
i--;
}
}
System.out.println("="+num.get(0));
return num.get(0).intValue();
}
public static void main(String[] args) {
String exp=readFromFile("f:\\temp\\1.txt");
exp=processParentheses(exp);
System.out.println(exp+"="+compute(exp));
}
}
import java.util.*;public class ComputeExpression {
public ComputeExpression() {
}
public static String readFromFile(String filename){
String rtn=null;
try{
BufferedReader in = new BufferedReader( new FileReader(filename));
rtn=in.readLine();
in.close();
}catch(Exception ex){
ex.printStackTrace();
}
return rtn;
}
public static String processParentheses(String src){
src=src.replace('{','(');
src=src.replace('[','(');
src=src.replace(']',')');
src=src.replace('}',')'); return src;
}
public static int compute(String exp){
List<Integer> num=new ArrayList<Integer>();
List<Character> op=new ArrayList<Character>(); byte[] e=exp.getBytes();
int pos=0;
for (int i=0;i<e.length;i++){
if (e[i]=='('){
int count=0;
for (int j=i+1;j<e.length;j++){
if (e[j]==')'&&count==0){
num.add(compute(exp.substring(i+1,j)));
i=j;
pos=-1;
break;
}else if(e[j]==')'){
count--;
}else if(e[j]=='('){
count++;
}
}
} else if(e[i]=='+'||e[i]=='-'||e[i]=='*'||e[i]=='/'){
if (pos!=-1){
num.add(Integer.parseInt(exp.substring(pos, i).trim()));
}
op.add((char)e[i]);
pos=i+1;
}
}
if (pos<e.length&&pos!=-1){
num.add(Integer.parseInt(exp.substring(pos,e.length).trim()));
} System.out.print(num.get(0));
for (int i=0;i<op.size();i++){
System.out.print(op.get(i));
System.out.print(num.get(i+1));
}
for (int i=0;i<op.size();i++){
if (op.get(i).equals(new Character('*'))){
Integer i1=num.get(i);
Integer i2=num.get(i+1);
num.set(i,i1.intValue()*i2.intValue());
num.remove(i+1);
op.remove(i);
i--;
} else if (op.get(i).equals(new Character('/'))){
Integer i1 = num.get(i);
Integer i2 = num.get(i + 1);
num.set(i, i1.intValue() / i2.intValue());
num.remove(i + 1);
op.remove(i);
i--;
}
} for (int i=0;i<op.size();i++){
if (op.get(i).equals(new Character('+'))){
Integer i1=num.get(i);
Integer i2=num.get(i+1);
num.set(i,i1.intValue()+i2.intValue());
num.remove(i+1);
op.remove(i);
i--;
} else if (op.get(i).equals(new Character('-'))){
Integer i1 = num.get(i);
Integer i2 = num.get(i + 1);
num.set(i, i1.intValue() - i2.intValue());
num.remove(i + 1);
op.remove(i);
i--;
}
} System.out.println("="+num.get(0));
return num.get(0).intValue();
} public static void main(String[] args) {
String exp=readFromFile("f:\\temp\\1.txt");
exp=processParentheses(exp);
System.out.println(exp+"="+compute(exp));
}
}
你都穿5个裤衩了,我还不努力,那--
还有天理吗?还有王法吗?