0
你好傢伙即時嘗試做一個基於用戶掃描儀輸入的計算器,該計算器工作正常,從左到右進行計算,但我有困難把優先級放在*,/和() 例如3+(5 * 2 )+1應該是14而不是我的是17,然後當我嘗試 5 +((2 + 1)* 3)-1它給了我奇怪的錯誤.. 任何人都可以幫忙嗎?以及如何讓我的代碼看起來更高效和更簡單,謝謝您提前。 因此,這裏是我的代碼:如何在我的計算器中首先計算乘法和除法?
System.out.print("Input Equation : ");
n = s.next() + s.nextLine();
n = n.replaceAll("\\s+", "");
char[] nans = n.toCharArray();
c = 0;
for (int i = 0; i < n.length(); i++)
if (nans[i] == '+' || nans[i] == '-' || nans[i] == '/' || nans[i] == '*')
c++;
char[] op = new char[c];
int[] num = new int[c + 1];
c = 0;
for (int i = 0; i < n.length(); i++) {
if (nans[i] == '+' || nans[i] == '-' || nans[i] == '/' || nans[i] == '*') {
op[c] = nans[i];
c++;
}
}
c = 0;
for (int i = 0; i < n.length(); i++) {
if (nans[i] == '1' || nans[i] == '2' || nans[i] == '3' || nans[i] == '4' || nans[i] == '5'
|| nans[i] == '6' || nans[i] == '7' || nans[i] == '8' || nans[i] == '9' || nans[i] == '0')
nus = nus + nans[i];
else if (nans[i] == '+' || nans[i] == '-' || nans[i] == '/' || nans[i] == '*') {
num[c] = Integer.parseInt(nus);
nus = "";
c++;
}
if (i == n.length() - 1){
num[c] = Integer.parseInt(nus);
}
}
for (int i = 0; i < c; i++) {
if (op[i] == '+') {
result = result + num[i] + num[i + 1];
num[i + 1] = 0;
}
else if (op[i] == '-') {
result = result + num[i] - num[i + 1];
num[i + 1] = 0;
}
else if (op[i] == '/') {
result = (result + num[i])/num[i + 1];
num[i + 1] = 0;
}
else if (op[i] == '*') {
result = (result + num[i]) * num[i + 1];
num[i + 1] = 0;
}
}
System.out.print(" = "+ result);
錯誤,因爲你沒有任何條件來檢查「(」或「)」 –
當你的變量名稱很模糊時,如'n','c','s','op '。你應該給你的變量有意義的名字。解釋你在你的決定或計算中想達到的意見也不會傷害任何一方。除此之外,說「怪異的錯誤」還不夠。您應該將包括堆棧跟蹤在內的錯誤添加到您的問題中,並用註釋突出顯示發生錯誤的行。 – RealSkeptic