zoukankan      html  css  js  c++  java
  • [Java]分解算术表达式二

    源码:

    package com.hy;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    // 程序入口
    public class Inlet {
        public static void main(String[] args) throws IOException{
            // 取得用户输入的表达式
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
            String rawExpression = null; 
            System.out.print("请输入算术表达式:"); 
            rawExpression = br.readLine(); 
            
            // 得到合法的算术表达式
            String expression="";    
            for(int i=0;i<rawExpression.length();i++){
                // 拿到表达式的每个字符
                char c=rawExpression.charAt(i);
                //System.out.print(c+","); 
                
                if(Character.isDigit(c) || c=='+' || c=='-' || c=='*' || c=='/' || c=='(' || c==')' ){
                    //System.out.print(c);
                    expression+=c;
                }else{
                    System.out.print(" "+c+"不是合法的算术表达式字符.");
                    System.exit(0);
                }
            }
            
            // 送去解析
            Parser p=new Parser(expression);
            p.print();
        }
    }

    Parser类:

    package com.hy;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Parser {
        private List<String> list;
        
        public Parser(String expression){
            list=new ArrayList<String>();
            
            String str="";
            for(int i=0;i<expression.length();i++){
                char c=expression.charAt(i);
                
                if(Character.isDigit(c)){
                    str+=c;
                }else{
                    if(str.length()>0){// 此判断是因为有+(这种符号相连的情况
                        //System.out.println(str);
                        list.add(str);
                        str="";
                    }
                    
                    //System.out.println(c);
                    list.add(String.valueOf(c));
                }
            }
            
            if(str.length()>0){// 此判断是因为可能表达式不是以=结尾
                //System.out.println(str);
                list.add(str);
                str="";
            }
        }
        
        public void print(){
            for(String str:list){
                System.out.println(str);
            }
        }
    }

    测试:

    请输入算术表达式:21-232-3232-(4+5)*20
    21
    -
    232
    -
    3232
    -
    (
    4
    +
    5
    )
    *
    20

    --End--2019年9月2日08点38分

  • 相关阅读:
    C# 基础练习题
    WinForm中实现播放mp3 、mp4文件
    C语言实现的水仙花数
    【转】.net 经典面试题
    vipspa实现前端路由
    spring定时任务<task:scheduled-tasks>的问题
    MongoDB中$month和$dayOfMonth的坑
    SpringMVC中MultipartFile参数问题
    IllegalStateException : Web app root system property already set to different value问题详解
    jsoup简单的爬取网页数据
  • 原文地址:https://www.cnblogs.com/heyang78/p/11444598.html
Copyright © 2011-2022 走看看