2016-10-14 77 views
0

我目前正在Android Studio中進行一個學校項目,到目前爲止,我已經編寫了一個代碼,每次按下按鈕時都會生成一個隨機方程,如「3 + 9/3」屏幕上。這個等式顯示在一個文本視圖中。現在我嘗試用雙「abs」命令評估方程的結果。爲此我將方程存儲在一個字符串中,然後嘗試將其轉換爲雙精度型,因爲「abs」命令不支持字符串。 下面是代碼:在雙精度型中保存方程

String[] operationSet = new String[]{"+", "-", "/", "*"}; 

public void generate(View view) { 
Random random = new Random(); 
int numOfOperations = random.nextInt(2) + 1; 

List<String> operations = new ArrayList<>(); 

for (int i = 0; i < numOfOperations; i++) { 
    String operation = operationSet[random.nextInt(4)]; 
    operations.add(operation); 
} 

int numOfNumbers = numOfOperations + 1; 
List<Integer> numbers = new ArrayList<>(); 

for (int i = 0; i < numOfNumbers; i++) { 
    int number = random.nextInt(10)+1; 
    numbers.add(number); 
} 

String equation = ""; 
for (int i = 0; i < numOfOperations; i++) { 
    equation += numbers.get(i); 
    equation += operations.get(i); 
} 
equation += numbers.get(numbers.size() -1); 

TextView TextEquation = (TextView)findViewById(R.id.textView); 
TextEquation.setText(equation); 

String stringResultOfEquation = String.valueOf(equation); 

// Calculate the result of the equation 

double doubleEquation = Double.parseDouble(equation); 
double doubleResult = abs(doubleEquation); 
String stringResult = String.valueOf(doubleResult); 

TextView textResult = (TextView)findViewById(R.id.textView2); 
textResult.setText(stringResult); 

} 

然而,當我在模擬器中運行應用程序我剛剛得到一個錯誤信息「NumberFormatException的」。所以我猜想把我的字符串轉換成double是有問題的。我的等式中的引號(例如:「5 * 3 + 6」)是否可能導致問題? 有沒有不同的方式來存儲我的方程從字符串,所以我可以使用「abs」命令?

如果有什麼事情在我的問題是不清楚的,隨意AKS,我會試圖澄清這一問題:)

謝謝你已經提前!

ps。我剛纔問了一個類似的問題,但它被錯誤地標記爲重複。

+0

方程式只能存儲爲字符串。你可以將結果轉換爲十進制,但是你需要首先計算結果。也許[這可能是有趣的](http://stackoverflow.com/questions/11993849/android-parse-simple-mathematical-formula-from-string) – musefan

+0

與上一個問題相同的請求。請添加logcat,請 –

+2

這個問題與前一個問題有什麼不同?還是舊的? http://stackoverflow.com/questions/39979079/calculate-the-exact-value-of-an-equation你必須實際解析**並評估**字符串。你不能把它解析爲雙精度...我相信你之前的問題被正確地標記了 –

回答

0

我認爲這個問題是這條線在這裏

double doubleEquation = Double.parseDouble(equation); 

你的「方程式」是String與操作,所以你不能解析Stringdouble。你必須首先評估你的「等式」。 爲此,您必須遍歷String operation中的每個字符,並且當char爲例如「+」時,執行加法。 String不只是評估一個數字本身。 像這樣

double i = Double.parseDouble("1"); 

將評估爲1.0

但是這將導致誤差

double i = Double.parseDouble("1+1"); 
+0

有沒有其他的方式來存儲方程,所以我可以使用「abs」命令? – zutru

+0

我不這麼認爲。您必須以任何方式評估String方程。 – Pear