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

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

/*
* 输入一个表达式,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)的更多相关文章

  1. 华为上机测试题(数字字符串转二进制-java)

    PS:此题满分,可参考 /*  * 题目:数字字符串转二进制 * 描述: 输入一串整数,将每个整数转换为二进制数,如果倒数第三个Bit是“0”,则输出“0”,如果是“1”,则输出“1”. 题目类别: ...

  2. 华为上机测试题(水仙花数升级版-java)

    PS:这题满分100,没有做对,大家帮忙看看问题在哪 /* * 题目:水仙花数升级版  * 描述: 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1 ...

  3. 华为上机测试题(Excel表格纵列字母数字转换-java)

    PS:这是我刚做的一道题,题目不难,满分60,得分40,大家看看哪里有问题,欢迎提意见,感谢! /* * 题目:Excel表格纵列字母数字转换 * 描述: 在Excel中列的编号为A-Z,AA-AZ, ...

  4. 华为上机测试题(MP3光标移动-java)

    PS:此题满分,可参考 描述: MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲.为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第 ...

  5. 华为上机测试题(大数相乘-java)

    PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...

  6. 华为上机测试题(及格分数线-java)

    PS:自己写的,自测试OK,供大家参考. /* 描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数:(2) 保证至少有60%的学生及格:(3) 如果所有 ...

  7. 华为上机测试题(求亮灯数量-java)

    PS:自己写的,自测试OK,供大家参考. /* 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1.2.3.…n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着.有n个学 ...

  8. 华为上机测试题(地铁换乘-java)

    PS:自己写的,自测试OK,供大家参考. /* 高级题样题:地铁换乘描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的.经过的站点名分别如下,两条线交叉的换乘点用T1.T2表示.编写 ...

  9. 华为上机题汇总----java

        以下华为上机题目都是网上整理得到的,代码都是自己调试过的,由于网上java答案较少,欢迎大家批评指正,也希望对准备华为上机的童鞋们有一点点帮助.在练习的过程中成长,加油!~~  第1题:输入字 ...

随机推荐

  1. filter() 函数的使用

    Python3 filter() 函数 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换. 该接收两个参数,第一个 ...

  2. 購買管理(MM)

    ■購買管理■ [購買伝票]EKKO: ヘッダ EKPO: 明細 EKET: 納入日程行 EKPA: 取引先機能 EKKN: 勘定設定 EKBE: 後続伝票 EKBEH: 削除済み後続伝票履歴 [請求書 ...

  3. 笔记-python-调试

    笔记-python-调试 一般在pycharm下调试或使用log查看输出日志,有时小程序不想这么麻烦,也有一些方便使用的调试方式可以使用. 1.      idle调试 1.打开Python shel ...

  4. PHP.16-PDO

    PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能. 注意利用 PDO 扩展自身并不能实现任何数 ...

  5. laravel5.5用户认证源码分析

    目录 1. 生成相关文件和配置 2. 分析路由文件 3. 以登陆开始为例,分析auth到底是怎么工作的 3.1 分析登录文件 3.2 分析门面Auth. 1. 生成相关文件和配置 快速生成命令 php ...

  6. imageX.exe

    imageX 编辑ImageX 是一个命令行工具,原始设备制造商 (OEM) 和公司可以使用它来捕获.修改和应用基于文件的磁盘映像以进行快速部署.ImageX 可以使用 Windows 映像 (.wi ...

  7. 剑指Offer - 九度1384 - 二维数组中的查找

    剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  8. Python 3基础教程13-写入文件

    前面介绍了函数,这篇我们就利用Python 内构函数open来写入字符串到txt文件里. 直接看demo.py 这里有一个小问题,如果我要输入时中文到txt文件会报unicode错误,暂时没法解决.

  9. App自动化测试前期准备---android SDK配置

    说明:就是配置android SDK 一.sdk下载 Windows(X64):立即下载 Linux(X64):立即下载 二.Windows配置 1.解压文件 直接解压到指定目录(演示目录:D:/) ...

  10. 牛客网暑期ACM多校训练营(第一场):D-Two Graphs

    链接:D-Two Graphs 题意:给出图G1和G2,求G2的子图中和G1同构的个数. 题解:只有8个点,暴力枚举G2的点每个排列,让G1映射到G2中,求出同构个数a.同构的G2就是在G1有边的对应 ...