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

xiaoxiao2021-02-28  65

面试碰见 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实现的,所以试试其他方法。当然可以把每个功能拆分成一个类,这样在有括号的时候就方便反复调用其中的一些方法。---第一次发帖

转载请注明原文地址: https://www.6miu.com/read-2628966.html

最新回复(0)