zoukankan      html  css  js  c++  java
  • 华为上机测试题(表达式运算-java)

    PS:自己写的,自测试OK,供大家参考。

    补充:数据解析的过程,评论区有更好的处理方式,可参考。

    /*
    * 输入一个表达式,3*8+7-2,没有括号 输出结果
    */

    /* 本程序暂不考虑容错处理 */

      1 import java.util.Scanner;
      2 
      3 public class Calculator {
      4 
      5     /* 例如:表达式 3*8+7-2中,dataNum=4,opNum=3 */
      6     private static int daNum = 0;    //表达式中数据个数
      7     private static int opNum = 0;    //表达式中运算符个数
      8     
      9     public static void main(String[] args) {
     10         
     11         System.out.println("请输入运算表达式(例如:3*8+7-2):");
     12         Scanner s = new Scanner(System.in);
     13         //String str = s.nextLine().toString();
     14         char[] ch = s.nextLine().toCharArray();
     15         s.close();
     16         StringBuffer sbOP = new StringBuffer();
     17         StringBuffer sbDA = new StringBuffer();
     18 
     19         int dataIndex = 0;
     20         int[] data = new int[32];    // 限定能处理的最大数据个数为32
     21         
     22         for(int i = 0; i < ch.length; i++)
     23         {
     24             if(('+' == ch[i])||('-' == ch[i])||('*' == ch[i])||('/' == ch[i]))
     25             {
     26                 sbOP.append(ch[i]);
     27                 opNum++;
     28                 for(int j = dataIndex; j < i; j++)
     29                 {
     30                     sbDA.append(ch[j]);
     31                 }
     32                 data[daNum++] = Integer.parseInt(sbDA.toString());
     33                 sbDA.delete(0, sbDA.length());    //清空sbDA
     34                 dataIndex = i+1;
     35             }
     36         }
     37         for(int j = dataIndex; j < ch.length; j++)
     38         {
     39             sbDA.append(ch[j]);
     40         }
     41         data[daNum++] = Integer.parseInt(sbDA.toString());
     42         int[] da = new int[daNum];    //数值数组
     43         for(int i = 0; i < daNum; i++)
     44         {
     45             da[i] = data[i];
     46             //System.out.println("da:"+da[i]);
     47         }
     48         char[] op = sbOP.toString().toCharArray();    //运算符数组
     49         
     50         System.out.println("="+cal(da, op));
     51     }
     52 
     53     private static int cal(int[] da, char[] op) {
     54         
     55         if(1 == daNum)
     56         {
     57             return da[0];
     58         }
     59         
     60         // 初始化 标示所以da值都是有效的
     61         boolean[] flag = new boolean[daNum];
     62         for(int i = 0; i < daNum; i++)
     63         {
     64             flag[i] = true;
     65         }
     66         
     67         while(1 != daNum)
     68         {
     69             // 乘除运算
     70             for(int i = 0; i < opNum; i++)
     71             {
     72                 if('*' == op[i])
     73                 {
     74                     da[i+1] = da[i] * da[i+1];
     75                     flag[i] = false;
     76                     daNum--;
     77                 }
     78                 if('/' == op[i])
     79                 {
     80                     da[i+1] = da[i] / da[i+1];
     81                     flag[i] = false;
     82                     daNum--;
     83                 }
     84             }
     85 
     86             // 加减运算
     87             int index = 0;
     88             for(int i = 0; i < opNum; i++)
     89             {
     90                 index = i+1;
     91                 if('+' == op[i])
     92                 {
     93                     while(!flag[index])
     94                     {
     95                         index++;
     96                     }
     97                     da[index] = da[i] + da[index];
     98                     flag[i] = false;
     99                     daNum--;
    100                 }
    101                 if('-' == op[i])
    102                 {
    103                     while(!flag[index])
    104                     {
    105                         index++;
    106                     }
    107                     da[index] = da[i] - da[index];
    108                     flag[i] = false;
    109                     daNum--;
    110                 }
    111             }
    112         }
    113         
    114         return da[opNum];
    115     }
    116 }
  • 相关阅读:
    JDBC 查询的三大参数 setFetchSize prepareStatement(String sql, int resultSetType, int resultSetConcur)
    有空必看
    SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换
    FusionCharts JavaScript API Column 3D Chart
    FusionCharts JavaScript API
    FusionCharts JavaScript API
    Extjs 继承Ext.Component自定义组件
    eclipse 彻底修改复制后的项目名称
    spring 转换器和格式化
    Eclipse快速生成一个JavaBean类的方法
  • 原文地址:https://www.cnblogs.com/lr-ting/p/3992487.html
Copyright © 2011-2022 走看看