簡體   English   中英

在Java中評估數學表達式

[英]Evaluating math expressions in java

我想在業余時間學習Java。 到目前為止,我喜歡它。 我目前正在開發一個簡單的4功能計算器的更高級版本。 本質上,我想輸入一個表達式,說“ 4 + 5”,然后將其拆分為第一項,第二項和一個運算符,然后根據檢測到的運算符來計算答案並輸出答案。 我的問題是,我將表達式存儲在char數組中,並且工作正常,除非第一個術語是兩位數,或者用戶添加了另一個運算符。 如何保持足夠的動態性以允許多種形式的簡單表達式?

我會嘗試使用StringTokenizer類。

將輸入捕獲為字符串,然后使StringTokenizer如下所示:

String delimiter =" ";
StringTokenizer st = new StringTokenizer(inputString, delimiter);

分隔符是字符串,您可以在字符串的各個有趣部分之間使用它,因此可以將其設置為空格。

之后,您可以通過調用nextToken方法提取部分輸入。

例如:

String firstTerm=st.nextToken();
String operator=st.nextToken();
String secondTerm=st.nextToken();

double ft=Double.parseDouble(firstTerm);
double st=Double.parseDouble(secondTerm);

然后,您可以使用輸入語句(例如switch語句)基於輸入運算符來決定要執行的操作。

您可能需要在此處進行一些異常處理,因為StringTokenizer會引發異常。

如果您願意,可以保持較低級別,並手動完成所有這些操作。 只需創建一個字符串,然后逐個字符地讀取字符數組,直到到達定界符。 您可以在到達定界符的循環中完成此操作。 然后,您可以使用該類來解析字符串中的數字。 您是否注意到Double中的大寫字母D? 這意味着我們正在調用名為Double的類的函數,該類將從字符串中解析數字。 還有用於Int的Integer類,用於單精度浮點數的Float類,等等。

如果表達式較長,則仍然可以使用StringTokenizer,因為有一個名為hasMoreElements的方法可用於檢查是否在輸入末尾。

如果您不打算擴展程序並希望使其盡可能簡單,那么這可能是完全的矯kill過正。 (我們在Java編程的第一學期就采用了這種方法,因此這應該是一個很好的練習。)您可以使用帶有數字堆棧的反向波蘭符號( Idea:Wikipedia )。 這將使您能夠使用括號並以正確的順序(*,/在+,-之前)執行多項操作。 另一方面,您將需要在每個基本操作周圍加上括號(例如“ (((A + B)+ C) “)。

當我以這種方式實現計算器時,我逐個字符地將字符串與兩個數字或逗號后面的數字相加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM