将输出的结果改为正整数

qq_43051072 2019-05-15 04:27:08
import java.util.Stack; import java.util.Scanner; public class ExpressionToDouble { private static boolean isNumber(char ch){ return ch == '.' || (ch >= '0' && ch <= '9'); } private static void hasAddOrSub(Stack<Character> s, char opration){ StringBuilder number = new StringBuilder(); while(true){ char cur = s.peek(); if (cur == opration) break; number.insert(0, cur); s.pop(); } s.pop(); double right = (int)Double.parseDouble(number.toString()); number.replace(0, number.length(), ""); while(!s.isEmpty()){ char cur = (char)s.peek(); number.insert(0, cur); s.pop(); } double left = (int)Double.parseDouble(number.toString()); number.replace(0, number.length(), ""); double res = 0; res=(int)res; if (opration == '+') res = left + right; else res = left -right; String str = res + ""; for(char chr : str.toCharArray()){ s.push(chr); } } private static void hasMulOrDiv(Stack<Character> s, char opration){ StringBuilder number = new StringBuilder(); while(true){ char cur = s.peek(); if (cur == opration) break; number.insert(0, cur); s.pop(); } s.pop(); double right = (int)Double.parseDouble(number.toString()); number.replace(0, number.length(), ""); while(!s.isEmpty()){ char cur = s.peek(); if (cur == '+' || cur == '-') break; number.insert(0, cur); s.pop(); } double left = (int)Double.parseDouble(number.toString()); number.replace(0, number.length(), ""); double res = 0; res=(int)res; if (opration == '*') res = left * right; else res = left / right; String str = res + ""; for(char chr : str.toCharArray()){ s.push(chr); } } private static boolean checkInfo(char []datas){ for(int i = 0; i < datas.length-1; i++){ if (!isNumber(datas[i]) && !isNumber(datas[i+1])) return false; if (datas[i] == '.' && datas[i+1] == '.') return false; } return true; } public static String StringToRes(String info){ Stack<Character> s = new Stack<Character>(); char []datas = info.toCharArray(); if (!checkInfo(datas)) return ""; boolean hasAdd = false; boolean hasSub = false; boolean hasMul = false; boolean hasDiv = false; for (char ch : datas){ if (isNumber(ch)){ s.push(ch); } else{ switch(ch){ case '+': if (hasMul){ hasMulOrDiv(s, '*'); hasMul = false; } if (hasDiv){ hasMulOrDiv(s, '/'); hasDiv = false; } if (hasAdd){ hasAddOrSub(s, '+'); hasAdd = false; } if (hasSub){ hasAddOrSub(s, '-'); hasSub = false; } s.push(ch); hasAdd = true; break; case '-': if (hasMul){ hasMulOrDiv(s, '*'); hasMul = false; } if (hasDiv){ hasMulOrDiv(s, '/'); hasDiv = false; } if (hasAdd){ hasAddOrSub(s, '+'); hasAdd = false; } if (hasSub){ hasAddOrSub(s, '-'); hasSub = false; } s.push(ch); hasSub = true; break; case '*': if (hasMul){ hasMulOrDiv(s, '*'); hasMul = false; } if (hasDiv){ hasMulOrDiv(s, '/'); hasDiv = false; } s.push(ch); hasMul = true; break; case '/': if (hasMul){ hasMulOrDiv(s, '*'); hasMul = false; } if (hasDiv){ hasMulOrDiv(s, '/'); hasDiv = false; } s.push(ch); hasDiv = true; break; case '=': if (hasMul){ hasMulOrDiv(s, '*'); hasMul = false; } if (hasDiv){ hasMulOrDiv(s, '/'); hasDiv = false; } if (hasAdd){ hasAddOrSub(s, '+'); hasAdd = false; } if (hasSub){ hasAddOrSub(s, '-'); hasSub = false; } StringBuilder number = new StringBuilder(); while(!s.isEmpty()){ char cur = (char)s.peek(); number.insert(0, cur); s.pop(); } return number.toString(); } } } return ""; } public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.print("请输入表示整数四则运算的字符串:"); System.out.println(StringToRes(input.next()+"=")); } } 求解,将输出结果从小数改为正整数,非常感谢!!!
...全文
50 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧