21xrx.com
2024-12-23 03:19:14 Monday
登录
文章检索 我的文章 写文章
Java实现计算器程序:代码案例分享
2023-06-17 09:13:16 深夜i     --     --
Java 计算器 栈数据结构

Java语言在计算程序开发中,由于其灵活、易用、高效的特性,被广泛应用于众多的领域当中。本文就为大家分享一款简易的Java计算器程序,不仅可以满足日常的计算需求,还可以辅助开发人员实践和掌握Java语言的相关知识点。

计算器程序主要功能包括:加减乘除和括号运算。这里我们将其分为三个部分:表达式输入、表达式计算和结果输出,具体实现如下。

1.表达式输入

很多时候,计算器程序的表达式输入采用中缀表达式方式,需要将中缀表达式转化为后缀表达式才能进行计算。在Java中,我们可以通过栈实现后缀表达式的转换。

以下为表达式输入的Java代码:


public static String toPostfix(String infix) {

  Stack stack = new Stack<>();

  StringBuilder postfix = new StringBuilder();

  char c;

  for (int i = 0; i < infix.length(); i++) {

    c = infix.charAt(i);

    switch (c) {

      case '+':

      case '-':

        while (!stack.isEmpty() && stack.peek() != '(') {

          postfix.append(stack.pop());

        }

        stack.push(c);

        break;

      case '*':

      case '/':

        while (!stack.isEmpty() && (stack.peek() == '*' || stack.peek() == '/')) {

          postfix.append(stack.pop());

        }

        stack.push(c);

        break;

      case '(':

        stack.push(c);

        break;

      case ')':

        while (!stack.isEmpty() && stack.peek() != '(') {

          postfix.append(stack.pop());

        }

        stack.pop();

        break;

      default:

        while (i < infix.length() && Character.isDigit(infix.charAt(i))) {

          postfix.append(infix.charAt(i++));

        }

        postfix.append(' ');

        i--;

        break;

    }

  }

  while (!stack.isEmpty()) {

    postfix.append(stack.pop());

  }

  return postfix.toString();

}

2.表达式计算

通过前面的转换,我们已经得到了后缀表达式,下面就可以通过栈计算该表达式的值了。具体实现如下:


public static double calculate(String postfix) {

  Stack stack = new Stack<>();

  double a, b;

  for (int i = 0; i < postfix.length(); i++) {

    char c = postfix.charAt(i);

    if (c == ' ') continue;

    if (Character.isDigit(c)) {

      int j = i;

      while (j < postfix.length() && Character.isDigit(postfix.charAt(j))) {

        j++;

      }

      stack.push(Double.parseDouble(postfix.substring(i, j)));

      i = j - 1;

    } else {

      b = stack.pop();

      a = stack.pop();

      switch (c) {

        case '+':

          stack.push(a + b);

          break;

        case '-':

          stack.push(a - b);

          break;

        case '*':

          stack.push(a * b);

          break;

        case '/':

          stack.push(a / b);

          break;

        default:

          break;

      }

    }

  }

  return stack.pop();

}

3.结果输出

最后,我们将计算结果输出即可,代码如下:


public static void main(String[] args) {

  String infix = "2*(3+4)-5/6";

  String postfix = toPostfix(infix);

  double result = calculate(postfix);

  System.out.println(result);

}

上面的代码将输出运算结果,本篇文章就分享到这里。通过该实例,相信读者可以更好的理解Java语言的基本语法以及栈等数据结构的运用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复