免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 莫名其道
打印 上一主题 下一主题

猫小请进,一个有关stringtokenizer的难题. [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-12-15 03:09 |只看该作者

猫小请进,一个有关stringtokenizer的难题.

因为他是教软件工程的,所以要求我们用他的算法编,
    我现在已经相出来了,其实我的程序只要加个tokenlast就可以, 等我明天给你贴出来看看。
    我觉的你的程序肯定是可行的,就象我以前那个一样,可是有点复杂,他就说我用的太多array了。

论坛徽章:
0
12 [报告]
发表于 2004-12-15 21:18 |只看该作者

猫小请进,一个有关stringtokenizer的难题.

搞定了
/*
* Created on 2004-12-10
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package TDD.tableur;

import java.util.NoSuchElementException;
import java.util.StringTokenizer;

/**
* @author 莫名其道
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Select {
    private String in = "";
    private String out= "";
    private String tokenlast = "";
        /**
         * @param string
         */
        public Select(String string) {
                in = string;
                // TODO Auto-generated constructor stub
               
        }
        /**
         * @return
         */
        public String select() {
                // TODO Auto-generated method stub
        StringTokenizer        dev = new StringTokenizer(in.trim() , "/+* -()" , true);               
        out = parseE(dev);            
        return out;
        }
       
        String parseE(StringTokenizer se) {
                String t = parseT(se);                              
                try{ int ti = Integer.parseInt(t);}
                catch(NumberFormatException e){
                        return "#Error";
                        }
                if(t.equals("+" || t.equals(""){  
                        return "#Error";
                        }
                else{
                        String  token = tokenlast ;                        
                        while (token.equals("+"||token.equals("-") {
                                String t2 = parseT(se);
                                if(t2.equals("#Error"||t2.equals(""||t2.equals("+")
                                        return "#Error";
                                else{
                                        if (token.equals("+") {
                                                t = cal(t,token,t2);                    
                                                } else {
                                                        if(token.equals("-"))
                                                                t = cal(t,token,t2);                       
                                                        }
                                        token = tokenlast;                          
                                        }
                                }
                        return t;   
                        }                                    
                }


String parseT(StringTokenizer st) {
        String t = parseF(st);                              
        String token = parseF(st);
        tokenlast = token;            
        while (token.equals("*")||token.equals("/")) {
                String t2 = parseF(st);                              
                if(t2.equals("#Error"))
                        return  "#Error";
                else{
                        if (token.equals("*")) {
                                t = cal(t,token,t2);                          
                                } else {
                                        if(token.equals("/"))
                                                t = cal(t,token,t2);                          
                                        }
                        token = parseF(st);                              
                        tokenlast = token;
                        }
                }                           
        return t;                                            
}
       
        String parseF(StringTokenizer sf) {
                String token = "";
                try{token = sf.nextToken();
                if(token.equals(" "))
                        token = sf.nextToken();
                } catch(NoSuchElementException e){
                        return "#Error";
                        }
                while(token.equals("(") || token.equals(")")){
                        if (token.equals("(")) {
                                String t = parseE(sf);                           
                                token = tokenlast;                        
                                if(!token.equals(")"))
                                        return "#Error";
                                return t;
                                } else {                                          
                                        return token;                                       
                                        }
                        }
                return token;
                }
       
       
/**
         * @param t
         * @param token
         * @param t2
         * @return
         */
        private String cal(String t, String token, String t2) {
                // TODO Auto-generated method stub
                int n = Integer.parseInt(t);
                int m = Integer.parseInt(t2);
                if(token.equals("+"))
                        n = n + m;
                else if(token.equals("-"))
                        n = n - m;
                else if(token.equals("*"))
                        n = n * m;
                else if(m!=0){
                        n = n / m;}
                   else {return "#Error";}
                return n + "";
        }
}

论坛徽章:
0
13 [报告]
发表于 2004-12-15 21:21 |只看该作者

猫小请进,一个有关stringtokenizer的难题.

已经经过junit的测试,基本没什么问题。
再次谢谢大家帮忙。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP