输入一串四则运算字符串不含(),输出结果

面试碰见
Scanner scanner=new Scanner(System.in);
			StringBuffer buf=new StringBuffer();
			buf.append(scanner.next());
			String string=buf.toString();
			StringBuffer buff=new StringBuffer();
			for (int i = 0; i < string.length(); i++) {
				//因为string.split("")会把两位数以上的数拆分成个位数,所以采取人工隔离的方法拆分字符串
				if ('+'==(string.charAt(i))||'-'==(string.charAt(i))||'*'==(string.charAt(i))||
'/'==(string.charAt(i))) {
					buff.append(","+string.charAt(i)+",");
				}else {
					buff.append(string.charAt(i));
				}
			}
			List<Float> numlist=new ArrayList<Float>();
			List<Character> charlist=new ArrayList<Character>();
			List<String> list=new ArrayList<String>();
			String[] strings=buff.toString().split(",");
			for (String string2 : strings) {
				list.add(string2);
			}
			Iterator<String> it=list.iterator();
			int i=0;
			char operator='0';
			while (it.hasNext()) {
				String str=it.next();
				//如果本次迭代的是数字,则判断运算符里是否有*/?有则做运算,没有则存入numlist;
				if (!"+".equals(str)&&!"-".equals(str)&&!"*".equals(str)&&!"/".equals(str)) {
					switch (operator) {
					case '*':
						numlist.set(i-1,numlist.get(i-1)*Float.valueOf(str));
						operator='0';
						break;
					case '/':
						numlist.set(i-1,numlist.get(i-1)/Float.valueOf(str));
						operator='0';
						break;
					default:numlist.add(Float.valueOf(str));
						i++;
						break;
					}
				}else if ("+".equals(str)||"-".equals(str)) {
						charlist.add(str.charAt(0));
				}else if ("/".equals(str)) {
						operator=str.charAt(0);
				}else {
						operator=str.charAt(0);
					}
				}
			int c=0;
			Iterator<Character> it2=charlist.iterator();
			while (it2.hasNext()) {
				switch (it2.next()) {
				case '+':numlist.set(c, numlist.get(c)+numlist.get(c+1));
					numlist.remove(c+1);
					break;
				default:numlist.set(c, numlist.get(c)-numlist.get(c+1));
				numlist.remove(c+1);
					break;
				}
			}
			System.out.println(numlist.get(0));

因为看到别人是用stack实现的,所以试试其他方法。当然可以把每个功能拆分成一个类,这样在有括号的时候就方便反复调用其中的一些方法。---第一次发帖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值