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-11多线程

    1-多任务可以由多进程完成,也可以由一个进程内的多线程完成. 1.1多线程代码示例 import time, threading def loop(): print("thread %s i ...

  2. 大话卷积神经网络(CNN)

      这几年深度学习快速发展,在图像识别.语音识别.物体识别等各种场景上取得了巨大的成功,例如AlphaGo击败世界围棋冠军,iPhone X内置了人脸识别解锁功能等等,很多AI产品在世界上引起了很大的 ...

  3. Git-Git协同与工作协同

    Git支持的协议 首先来看看数据交换需要使用的协议. Git提供了丰富的协议支持,包括:SSH.GIT.HTTP.HTTPS.FTP.FTPS.RSYNC及前面已经看到的本地协议等.各种不同协议的UR ...

  4. TouTiao开源项目 分析笔记14 段子评论

    1.段子页面详情 1.1.先看看预览界面吧 左边的页面已经实现了,现在的目的就是要实现点击左侧的每一个item 然后跳转到右边相应的段子详情页面. 1.2.首先肯定有右侧这个活动==>JokeC ...

  5. 15.6,redis主从同步

    redis主从同步 原理:1. 从服务器向主服务器发送 SYNC 命令.2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令.3 ...

  6. 3611: [Heoi2014]大工程

    3611: [Heoi2014]大工程 链接 分析: 树形dp+虚树. 首先建立虚树,在虚树上dp. dp:sum[i]为i的子树中所有询问点之间的和.siz[i]为i的子树中有多少询问点,mn[i] ...

  7. Python的函数一

    一.函数的定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print().可以自己创建函数,这被 ...

  8. Eclipse 视图---Eclipse教程第05课

    关于视图 Eclipse视图允许用户以图表形式更直观的查看项目的元数据. 例如,项目导航视图中显示的文件夹和文件图形表示在另外一个编辑窗口中相关的项目和属性视图. Eclipse 透视图(perspe ...

  9. Pascal “内存病毒”(骗人的)

    Pascal内存病毒 Chaobs从互联网上获得 pascal病毒虽然说只用Ctrl+Pause Break就可以关闭,但是像有些程序一旦启动,不用等你找到那两个键,就自己运行结束关闭了.比如下面一个 ...

  10. 【tmux环境配置】在centos6.4上配置tmux

    我学习tmux的动力如下: (1)tmux大法好.原因是被同学安利过tmux. (2)多个terminal下ssh到开发机太麻烦.还是之前实习的时候,总要开N个terminal去ssh开发机,这种东西 ...