沒有界面,沒有判斷是否是合理的輸入...複製內容到剪貼板
代碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Compute {
//store numbers and symbols such + { ^
public static ArrayList val = new ArrayList();
public static void main(String[] args) {
InputStreamReader isr = new InputStreamReader( System.in );
BufferedReader stdin = new BufferedReader(isr);
String input = null;
while(true) {
System.out.println("============ Small Calculator ============");
System.out.println(" Q or q for quit.");
System.out.println(" Please input: ");
try {
input = stdin.readLine();
val = new ArrayList();
if (input.trim().equals("Q") || input.trim().equals("q"))
break;
else
startCalculate(input);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void startCalculate(String line) {
char[] a = line.toCharArray();
String var = "";
for (int i = 0; i < a.length; i++) {
switch (a[i]) {
case '+':
case '-':
case '*':
case '/':
case '^':
case '(':
case ')':
if (!var.equals("") && !var.equals(null))
{
val.add(var);
var = "";
}
val.add(String.valueOf(a[i]));
break;
default:
var += a[i];
if (i == a.length-1)
val.add(var);
break;
}
}
while (val.size()>1) {
calculate();
}
System.out.println(val.get(0));
}
// Check weather these is bracket or not
// if bracket exists、then calculate the value
// within the first pair of bracket
private static void calculate() {
int leftbracket = 0;
int rightbracket = 0;
for (int i = 0; i < val.size(); i++ ){
if (val.get(i).equals("("))
leftbracket = i;
else if (val.get(i).equals(")")) {
rightbracket = i;
//remove bracket and calculate the value within them
val.remove(rightbracket);
val.remove(leftbracket);
CalPow(leftbracket,rightbracket-2);
return;
}
}
//no bracket calculation.
CalPow(0、val.size()-1);
}
//Calculate the highest PRI which is power (^) from right side.
private static void CalPow(int startPos、int endPos) {
for (int i = endPos; i >= startPos; i--) {
if (val.get(i).equals("^"))
{
//calculate the power and store it into the left value
//remove ^ and the right value
val.set(i-1、String.valueOf(Math.pow(Double.parseDouble(val.get(i-1)),Double.parseDouble(val.get(i+1)))));
val.remove(i+1);
val.remove(i--);
endPos-=2;
}
}
//No Power Symbol
CalSimple(startPos、endPos);
}
//No Bracket No Power Symbol
private static void CalSimple(int startPos、int endPos) {
double result = 0.0; //return
double temp = 0.0; //store the value which is used for low PRI calculation
String symbol = "";
for (int i = startPos; i<= endPos; i++) {
if (val.get(i).equals("+")) {
if (temp != 0.0) {
if (symbol.equals("+")) {
result += temp;
}
else if (symbol.equals("-")) {
result -= temp;
}
}
temp = 0.0;
symbol = "+";
} else if (val.get(i).equals("-")) {
if (temp != 0.0) {
if (symbol.equals("+")) {
result += temp;
}
else if (symbol.equals("-")) {
result -= temp;
}
}
temp = 0.0;
symbol = "-";
} else if (val.get(i).equals("*")) {
if (temp != 0.0) {
temp *= Double.parseDouble(val.get(++i));
} else {
result *= Double.parseDouble(val.get(++i));
}
} else if (val.get(i).equals("/")) {
if (temp != 0.0) {
temp /= Double.parseDouble(val.get(++i));
} else {
result /= Double.parseDouble(val.get(++i));
}
} else {
if (symbol.equals(""))
result = Double.parseDouble(val.get(i));
else temp = Double.parseDouble(val.get(i));
}
}
if (symbol.equals("+")) {
result += temp;
}
else if (symbol.equals("-")) {
result -= temp;
}
val.set(startPos、String.valueOf(result));
for (int i =endPos ; i> startPos; i--)
val.remove(i);
}
}
儲存為 Compute.java 檔案
進入Dos 模式,這個檔案的目錄下
javac Compute.java //編譯
java Compute //運行
打開java編程工具,把代碼複製進去,然後運行