华为上机测试题(表达式运算-java)
2014-09-25 12:03
423 查看
PS:自己写的,自测试OK,供大家参考。
补充:数据解析的过程,评论区有更好的处理方式,可参考。
/*
* 输入一个表达式,3*8+7-2,没有括号 输出结果
*/
/* 本程序暂不考虑容错处理 */
补充:数据解析的过程,评论区有更好的处理方式,可参考。
/*
* 输入一个表达式,3*8+7-2,没有括号 输出结果
*/
/* 本程序暂不考虑容错处理 */
import java.util.Scanner; public class Calculator { /* 例如:表达式 3*8+7-2中,dataNum=4,opNum=3 */ private static int daNum = 0; //表达式中数据个数 private static int opNum = 0; //表达式中运算符个数 public static void main(String[] args) { System.out.println("请输入运算表达式(例如:3*8+7-2):"); Scanner s = new Scanner(System.in); //String str = s.nextLine().toString(); char[] ch = s.nextLine().toCharArray(); s.close(); StringBuffer sbOP = new StringBuffer(); StringBuffer sbDA = new StringBuffer(); int dataIndex = 0; int[] data = new int[32]; // 限定能处理的最大数据个数为32 for(int i = 0; i < ch.length; i++) { if(('+' == ch[i])||('-' == ch[i])||('*' == ch[i])||('/' == ch[i])) { sbOP.append(ch[i]); opNum++; for(int j = dataIndex; j < i; j++) { sbDA.append(ch[j]); } data[daNum++] = Integer.parseInt(sbDA.toString()); sbDA.delete(0, sbDA.length()); //清空sbDA dataIndex = i+1; } } for(int j = dataIndex; j < ch.length; j++) { sbDA.append(ch[j]); } data[daNum++] = Integer.parseInt(sbDA.toString()); int[] da = new int[daNum]; //数值数组 for(int i = 0; i < daNum; i++) { da[i] = data[i]; //System.out.println("da:"+da[i]); } char[] op = sbOP.toString().toCharArray(); //运算符数组 System.out.println("="+cal(da, op)); } private static int cal(int[] da, char[] op) { if(1 == daNum) { return da[0]; } // 初始化 标示所以da值都是有效的 boolean[] flag = new boolean[daNum]; for(int i = 0; i < daNum; i++) { flag[i] = true; } while(1 != daNum) { // 乘除运算 for(int i = 0; i < opNum; i++) { if('*' == op[i]) { da[i+1] = da[i] * da[i+1]; flag[i] = false; daNum--; } if('/' == op[i]) { da[i+1] = da[i] / da[i+1]; flag[i] = false; daNum--; } } // 加减运算 int index = 0; for(int i = 0; i < opNum; i++) { index = i+1; if('+' == op[i]) { while(!flag[index]) { index++; } da[index] = da[i] + da[index]; flag[i] = false; daNum--; } if('-' == op[i]) { while(!flag[index]) { index++; } da[index] = da[i] - da[index]; flag[i] = false; daNum--; } } } return da[opNum]; } }
相关文章推荐
- 华为上机测试题(大数相乘-java)
- 华为上机测试题(协议数据解析-java)
- 华为上机测试题(Excel表格纵列字母数字转换-java)
- 华为上机测试题(数字字符串转二进制-java)
- 华为上机测试题(求亮灯数量-java)
- 华为上机测试题(数字字符串转二进制-java)
- 华为上机测试题(水仙花数升级版-java)
- 华为上机测试题(地铁换乘-java)
- 华为上机测试题(及格分数线-java)
- java上机第三周 任务3 分数的四则运算
- 2013年华为校园招聘上机题(java)
- java四则运算表达式不包含括号
- 华为上机题汇总----java
- 华为上机题汇总----java
- 字符串四则运算表达式的计算(华为机试)
- java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式
- 华为Java上机题 2013年 [广州]
- 华为Java上机题
- java位运算符和位运算表达式
- 两道华为上机题目解答(Java语言)