求写一个方法 要求传入任意一个算式 如:“2+3*5+3/2” 求该方法算出结果 这个必须用递归怎么做?
我没有用过递归,这个题我是直接拆分成数组做出来了,但是要求我用递归,知道的说下吧!最好是代码配合原理的说下,谢谢了
我没有用过递归,这个题我是直接拆分成数组做出来了,但是要求我用递归,知道的说下吧!最好是代码配合原理的说下,谢谢了
解决方案 »
- jdbc远程连接windows身份验证sql server问题
- com.mysql.jdbc.exceptions.MySQLSyntaxErrorException
- ibatis + sybase 返回自增值异常 ??
- 大家帮我一下这个程序的错误,我弄了一天了也不对,希望各位帮帮忙,另外请问sql sever 2005的驱动包是什么及放在什么地方
- 本人需要一个Ajax验证的登陆
- 求助petstore如何在myeclipse+tomcat+oracle下部署加运行啊
- hibernate的session.load()问题 请指教
- tomcat的配置问题,高手进来看一下
- 我用j2sdkee部署ejb时,mssql数据库的JNDI怎么写呀?
- jb7也太差了,作好的ejb和值对象,刚开始jb能打在一个包里,不知为什么ejb和什对象就打不到一个包里,有时还有其它的问题?
- Axis2发布问题,跪求大神帮忙,真的找不到原因啊!
- Tomcat在bin目录下启动和在服务中启动的区别
ScriptEngine se = sem.getEngineByName("js");
String script = "2+3*5+3/2";
System.out.println( se.eval(script));
public static int countString(String s){
int num = 0 ;
String[] ss = s.split("[\\+\\-\\*/\\(\\)]") ;
if( ss.length>2){
int si = 0 ;
if( (si=s.indexOf("("))!=-1){
num = countString(s.substring(si+1 , s.indexOf(")")));
num =countString(s.substring(0 , si)+num + s.substring(s.indexOf(")")+1));
}else if((si=s.replaceAll("[\\*/]", ",").indexOf(","))!= -1 ){
System.out.println(si);
int statr = s.substring(0, si).replaceAll("[\\+\\-\\*/\\(\\)]", ",").lastIndexOf(",") ;
int end = s.substring( si+1).replaceAll("[\\+\\-\\*/\\(\\)]", ",").indexOf(",") ;
num = countString(s.substring(statr==-1?0:statr, end==-1?s.length():end+2));
num =countString(s.substring(0 , statr==-1?0:statr)+num + s.substring(end==-1?s.length():end+2));
}else if((si=s.replaceAll("[\\+\\-]", ",").indexOf(","))!= -1 ){
int statr = s.substring(0, si).replaceAll("[\\+\\-\\*/\\(\\)]", ",").lastIndexOf(",") ;
int end = s.substring( si+1).replaceAll("[\\+\\-\\*/\\(\\)]", ",").indexOf(",") ;
num = countString(s.substring(statr==-1?0:statr, end==-1?s.length():end+2));
num = countString(s.substring(0 , statr==-1?0:statr)+num + s.substring(end==-1?s.length():end+2));
}
}else{
int index =s.replaceAll("[\\+\\-\\*/\\(\\)]", ",").indexOf(",") ;
if(index!=-1){
String s2 = s.substring(index,index+1) ;
if(s2.equals("*"))
num = new Integer(ss[0]) * new Integer(ss[1]) ;
if(s2.equals("/"))
num = new Integer(ss[0]) / new Integer(ss[1]) ;
if(s2.equals("+"))
num = new Integer(ss[0]) + new Integer(ss[1]) ;
if(s2.equals("-"))
num = new Integer(ss[0]) - new Integer(ss[1]) ;
}else{
num = new Integer(s) ;
}
}
return num;
}
手写的一个 你试试
System.out.println(s);
int num = 0 ;
String[] ss = s.split("[\\+\\-\\*/\\(\\)]") ;
if( ss.length>2){
int si = 0 ;
if( (si=s.indexOf("("))!=-1){
num = countString(s.substring(si+1 , s.indexOf(")")));
num =countString(s.substring(0 , si)+num + s.substring(s.indexOf(")")+1));
}else if((si=s.replaceAll("[\\*/]", ",").indexOf(","))!= -1 ){
int statr = s.substring(0, si).replaceAll("[\\+\\-\\*/\\(\\)]", ",").lastIndexOf(",") ;
System.out.println(si);
int end = s.substring( si+1).replaceAll("[\\+\\-\\*/\\(\\)]", ",").indexOf(",") ;
num = countString(s.substring(statr==-1?0:statr+1, end==-1?s.length():si+end+1));
num =countString(s.substring(0 , statr==-1?0:statr+1)+num + s.substring(end==-1?s.length():si+end+1));
}else if((si=s.replaceAll("[\\+\\-]", ",").indexOf(","))!= -1 ){
if(si==0){
num = countString("&"+s.substring(1) );
}else{
int statr = s.substring(0, si).replaceAll("[\\+\\-\\*/\\(\\)]", ",").lastIndexOf(",") ;
int end = s.substring( si+1).replaceAll("[\\+\\-\\*/\\(\\)]", ",").indexOf(",") ;
num = countString(s.substring(statr==-1?0:statr+1, end==-1?s.length():end+2));
num = countString(s.substring(0 , statr==-1?0:statr+1)+num + s.substring(end==-1?s.length():end+2));
}
}
}else{
int index =s.replaceAll("[\\+\\-\\*/\\(\\)]", ",").indexOf(",") ;
if(index!=-1){
String s2 = s.substring(index,index+1) ;
if(ss[0].substring(0, 1).equals("&"))
ss[0] ="-"+ ss[0].substring(1) ;
if(s2.equals("*"))
num = new Integer(ss[0]) * new Integer(ss[1]) ;
if(s2.equals("/"))
num = new Integer(ss[0]) / new Integer(ss[1]) ;
if(s2.equals("+"))
num = new Integer(ss[0]) + new Integer(ss[1]) ;
if(s2.equals("-"))
num = new Integer(ss[0]) - new Integer(ss[1]) ;
}else{
num = new Integer(s) ;
}
}
return num;
}重新发一个 这个好点