• 华为上机测试题(表达式运算-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 }
  • 相关阅读:
    史上最全的正则表达式-匹配中英文、字母和数字
    使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug
    装了Yaml 然后代码一运行就报错 YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe.
    mac安装yaml
    如何获取android app的package和Activity
    Original error: No Chromedriver found that can automate Chrome '39.0.0'.
    mac chromedriver安装
    keycode相关方法
    python+appium的物理按键代码
    Python测试Websocket接口
  • 原文地址:https://www.cnblogs.com/lr-ting/p/3992487.html
Copyright © 2020-2023  润新知