【java数据结构与算法学习】逆波兰计算器

超、凢脫俗 2022-05-30 05:05 247阅读 0赞

逆波兰表达式也叫后缀表达式,采用逆波兰表达式无需考虑运算符的优先级,逆波兰表达式的计算是使用栈来实现的

下面是我写的逆波兰的计算,本人是个小菜鸟,希望各位大牛多指点指点。

主要的思想就是:当我们遇到操作符的时候,就出栈两个元素进行计算,然后将计算结果压入栈中;遇到数字的时候就进行压栈操作

  1. import java.util.Arrays;
  2. import java.util.Scanner;
  3. public class NiBoLan {
  4. //逆波兰计算器是由栈来实现的,首先要定义栈
  5. private Object[] objects;
  6. private int top;
  7. private int maxSize;
  8. public NiBoLan(){
  9. maxSize = 20;
  10. objects = new Object[maxSize];//定义栈的大小为20
  11. top = -1;
  12. }
  13. public boolean push(Object o){
  14. if (top == maxSize-1){
  15. objects = Arrays.copyOf(objects,maxSize+maxSize/2);
  16. maxSize = maxSize+maxSize/2;
  17. }
  18. objects[++top] = o;
  19. return true;
  20. }
  21. public Object pop(){
  22. if (top < 0){
  23. return null;
  24. }
  25. return objects[top--];
  26. }
  27. public static void main(String[] args) {
  28. NiBoLan niBoLan = new NiBoLan();
  29. //首先获得用户输入的字符串,格式是用空格分隔
  30. Scanner sc = new Scanner(System.in);
  31. String input = sc.nextLine();
  32. String[] chs = input.split(" ");
  33. //当遇到操作符的时候,进行计算,并将结果压入栈中,这里我们也可以使用switch来实现
  34. for (String str :
  35. chs) {
  36. if (str.equals("+")){
  37. String first = (String) niBoLan.pop();
  38. String second = (String) niBoLan.pop();
  39. niBoLan.push(Integer.parseInt(second) + Integer.parseInt(first)+"");
  40. }else if (str.equals("-")){
  41. String first = (String) niBoLan.pop();
  42. String second = (String) niBoLan.pop();
  43. niBoLan.push(Integer.parseInt(second) - Integer.parseInt(first)+"");
  44. }else if (str.equals("*")){
  45. String first = (String) niBoLan.pop();
  46. String second = (String) niBoLan.pop();
  47. niBoLan.push(Integer.parseInt(second) * Integer.parseInt(first)+"");
  48. }else if (str.equals("/")){
  49. String first = (String) niBoLan.pop();
  50. String second = (String) niBoLan.pop();
  51. niBoLan.push(Integer.parseInt(second) / Integer.parseInt(first)+"");
  52. }else {
  53. niBoLan.push(str);
  54. }
  55. }
  56. //最终结果出栈
  57. String result = (String) niBoLan.pop();
  58. System.out.println(result);//1 + 2 * 6 / 4 = 4 1 2 6 * 4 / +
  59. }
  60. }

发表评论

表情:
评论列表 (有 0 条评论,247人围观)

还没有评论,来说两句吧...

相关阅读

    相关 波兰计算器

    该版本只支持整数类型数进行计算 本文主要是对逆波兰计算器的原理介绍和代码实现,所以对前缀、中缀、后缀表达式不做过多的赘述,下面先简单介绍一下后缀表达式 后缀表达式又称逆波兰

    相关 波兰计算器

    > 逆波兰表达式又叫做后缀表达式,逆波兰表达式把运算量写在前面,把运算符写在后面。 我们平时书写的表达式都是中缀表达式,这个表达式更加方便我们进行计算。但是相对于计算机而言,

    相关 波兰计算器

    一 整体算法 1 输入一个中缀表达式。 2 将中缀表达式转换为后缀表达式(逆波兰表达式)。 3 根据逆波兰表达式求算最后的结果。 二 将中缀表达式转换为后缀表达式