将String的字符运算装成实际的逻辑运算会出错

2522535 2013-08-29 05:26:46
import java.util.StringTokenizer;
import java.util.*;

public class TestStringTokenizer {
public static void main(String[]args){
String s = "1+5*6" ;
StringTokenizer stringTokenizer = new StringTokenizer(s ,"+-*/",true) ;
ArrayList <Character> array = new ArrayList<Character>() ;
ArrayList <Double> array1 = new ArrayList<Double>() ;
while( stringTokenizer.hasMoreTokens() ){
String token = stringTokenizer.nextToken() ;
if( token.length() == 0 )
continue ;
else if ( token.charAt(0) == '+' || token.charAt(0)=='-' ){
while( !array.isEmpty() &&(
array.get(array.size() - 1) == '+' ||
array.get(array.size() - 1) == '-' ||
array.get(array.size() - 1) == '*' ||
array.get(array.size() - 1) == '/' )){
count(array , array1) ;
}
array.add(token.charAt(0)) ;
}
else if ( token.charAt(0) == '*' || token.charAt(0) == '/' ) {
while( !array.isEmpty() && (
array.get(array.size() - 1) == '*' ||
array.get(array.size() - 1) == '/' )){
count(array , array1) ;
}
array.add(token.charAt(0)) ;
}
else
array1.add( Double.valueOf(token.charAt(0)) ) ;
}
p(array1.size()-1) ;
}
public static void count (ArrayList<Character> array , ArrayList<Double> array1){
if( !array.isEmpty() && !array1.isEmpty() ){
char c = array.remove( array.size() - 1 ) ;
double d1 = array1.remove( array1.size() -1 ) ;
double d2 = array1.remove( array1.size()-1 ) ;
if( c == '+' ){
array1.add(d1 + d2 ) ;
}
else if( c == '-' )
array1.add(d1 - d2 ) ;
else if( c == '*' )
array1.add(d1 * d2 ) ;
else
array1.add( d1 / d2 ) ;
}
}
public static void p(Object o){
System.out.println(o) ;
}
}
...全文
85 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧