자바 계산기 구현 코드
public class MyCalculator {
public static void main(String[] args) {
String obj = "6+(8/2)+6/3+1*8 + 30";
ArrayList<String> arrayList = strFormat(obj);
System.out.println(obj + "=" + calculator(arrayList));
}
/**
*
* 1、 ,
* 2、 ,
* 3、 ,
*/
private static int calculator(ArrayList<String> obj) {
ArrayList<String> result = transform(obj);
System.out.println(result);
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < result.size(); i++) {
String symbol = result.get(i);
if (isDigital(symbol)) { //
stack.push(Integer.parseInt(symbol));
} else { //
int num1, num2;
num1 = stack.pop(); //
num2 = stack.pop();
switch (symbol) {
case "+":
stack.push(num2 + num1);
break;
case "-":
stack.push(num2 - num1);
break;
case "*":
stack.push(num2 * num1);
break;
case "/":
stack.push(num2 / num1);
break;
default:
break;
}
}
}
return stack.pop();
}
/**
*
*/
private static ArrayList<String> transform(ArrayList<String> arrayList) {
Stack<String> stack = new Stack<>();
ArrayList<String> result = new ArrayList<>();
for (int index = 0; index < arrayList.size(); index++) {
String symbol = arrayList.get(index);
if (isDigital(symbol)) { //
result.add(symbol);
} else if (symbol.equals(")")) {
String tmp;
while (!(tmp = stack.pop()).equals("(")) { //
result.add(tmp);
}
} else {
if (stack.isEmpty()) {
stack.push(symbol);
continue;
}
String tmp = stack.peek();
while (outPriority(symbol) <= inPriority(tmp)) { // ,
result.add(tmp);
stack.pop();
if (stack.isEmpty()) {
break;
}
tmp = stack.peek();
}
stack.push(symbol);
}
}
//
while (!stack.isEmpty()) {
result.add(stack.pop());
}
return result;
}
/**
* String ArrayList
* @param src 3*5+8;
* @return ArrayList 3 * 5 + 8
*/
private static ArrayList<String> strFormat(String src) {
if (src == null || src.equals("")) {
return null;
}
ArrayList<String> arrayList = new ArrayList<>();
StringBuilder comChar = new StringBuilder();
for (int i = 0; i <src.length(); i++) {
char ch = src.charAt(i);
if (ch == ' ') {
continue; //
}
if (!Character.isDigit(ch)) {
if (!comChar.toString().trim().equals("")) {
arrayList.add(comChar.toString().trim());
comChar.delete(0, comChar.length());
}
arrayList.add(ch + "");
continue;
}
comChar.append(ch);
}
if (!comChar.toString().trim().equals("")) {
arrayList.add(comChar.toString().trim());
}
return arrayList;
}
/**
*
* @param symbol 782 + - * /
* @return true or false
*/
private static boolean isDigital(String symbol) {
return !symbol.equals("+") && !symbol.equals("-")
&& !symbol.equals("*") && !symbol.equals("/")
&& !symbol.equals("(") && !symbol.equals(")");
}
private static int inPriority(String ch) {
switch (ch) {
case "+":
case "-":
return 2;
case "*":
case "/":
return 4;
case ")":
return 7;
case "(":
return 1;
default:
return 0;
}
}
private static int outPriority(String ch) {
switch (ch) {
case "+":
case "-":
return 3;
case "*":
case "/":
return 5;
case ")":
return 1;
case "(":
return 7;
default:
return 0;
}
}
}
이상 은 모두 이 글 의 전체 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.