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. Python 装饰器执行顺序迷思

    Table of Contents 1. 探究多个装饰器执行顺序 1.1. 疑问 1.2. 函数和函数调用的区别 1.3. 装饰器函数在被装饰函数定义好后立即执行 1.4. 疑问的解释 2. 参考资料 ...

  2. GItHub 建立仓库克隆仓库

    Linux环境 建立本地仓库 mkdir git cd git git init 获取仓库地址 找到你的仓库,Clone or download,复制 克隆仓库到本地 git clone https: ...

  3. Enhacing the content with JavaScript

    What not to do :  In theory , you could use JavaScript to add important content to a web page. Howev ...

  4. P3818 小A和uim之大逃离 II(洛谷月赛)

    P3818 小A和uim之大逃离 II 题目背景 话说上回……还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然 ...

  5. C# 6.0/7.0 的新特性

    转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅. ...

  6. 剑指Offer - 九度1350 - 二叉树的深度

    剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...

  7. python学习笔记五:模块和包

    一.模块用import导入 cal.py: #!/usr/bin/python def add(x,y): return x+y if __name__ == '__main__': print ad ...

  8. centos6 install cobbler

    cobbler 安装   一:定义yum源 wget -c -O CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo ...

  9. 剑指offer-替换空格02

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. class Solution: ...

  10. pytorch下对简单的数据进行分类(classification)

    看了Movan大佬的文字教程让我对pytorch的基本使用有了一定的了解,下面简单介绍一下二分类用pytorch的基本实现! 希望详细的注释能够对像我一样刚入门的新手来说有点帮助! import to ...