[英]Calculator class, parsing and processing multiple operations in single input line
我正在研究一個計算器類,以更好地理解Java。 以下是我的代碼框架,可為您提供一個想法。 目前,它只能處理簡單的命令,例如2+2
2/2
2^2
等。
任何人都可以從此處開始提供指導或示例嗎?
如何調整解析器以了解更復雜的命令,例如(2 + (2 * 2^2)) / 2
? 另外,如何調整我的方法以接受任意數量的參數? 我使用數組存儲我的值和運算符。 也許我可以使用ArrayList,以便它可以處理任意數量的元素/參數?
如何建立一般准則和操作順序(PEMDAS)以指導程序進行計算?
謝謝您的幫助!
import java.util.Scanner;
public abstract class Calc
{
private static double num1, num2;
public static void start()
{
System.out.println("Calculator. Type \"exit\" to quit.");
System.out.print("> ");
Scanner scan = new Scanner(System.in);
String entry = scan.nextLine();
while (! (entry.equals("exit")))
{
String [] operands = entry.replaceAll("\\s+", "").split("[\\+\\-\\/\\*\\%\\^]");
String operator = entry.replaceAll("(\\s+|\\d+|\\.)", "");
Double [] numbers = new Double[operands.length];
for (int i = 0; i < operands.length; i++)
{
numbers[i] = new Double(operands[i]);
}
num1 = numbers[0];
num2 = numbers[1];
double result = 0;
switch (operator)
{
case "+":
result = Calc.add(num1, num2);
break;
case "-":
...
case "*":
...
case "/":
...
case "^":
...
case "%":
...
default:
System.out.println("Not valid.");
}
System.out.println(result);
System.out.print("> ");
entry = scan.nextLine();
}
}
public static double add(double num1, double num2)
{
double sum = num1 + num2;
return sum;
}
public static double subtract(double num1, double num2)
{
...
}
public static double multiply(double num1, double num2)
{
...
}
public static double divide(double num1, double num2)
{
...
}
public static double exponentiate(double num1, double num2)
{
...
}
public static double modulus(double num1, double num2)
{
...
}
}
一種非常簡單的方法是多次運行。 說你有以下表達
2 + 2 * 2^2 / 2
首先運行並做指數。 你留下了
2 + 2 * 4 / 2
然后遍歷並進行乘法/除法
2 + 4
然后加/減
6
塔達!
您可能希望將表達式存儲為String並解析所要查找的運算符。 然后得到相鄰的數字並將整個東西縮小為一個數字。 括號稍微難一點,但是可以用遞歸的方法幾乎完全相同。 只需對每個括號級別執行上述方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.