Сделал все по алгоритму
Сначала перевод infix в postfix и запись операндов в стек метод convert()
Далее метод который все это считает calculate()
Не могу понять где ошибся
Класс SimpleCalculatorApp, он же Main
package SimpleCalculator;
public class SimpleCalculatorApp {
public static void main(String[] args) {
InfixToPostfix.convert(String.valueOf(2+2));
}
}
Класс InfixToPostfix
package SimpleCalculator;
import java.util.HashMap;
import java.util.Map;
public class InfixToPostfix {
public static void convert (String infix){
Stos stack = new Stos(10);
StringBuffer postfix = new StringBuffer(infix.length());
Map<Character, Integer> map = new HashMap<>();
map.put('+', 1);
map.put('-', 1);
map.put('*', 2);
map.put('/', 2);
map.put('%', 2);
map.put('(', -1);
map.put(')', -1);
char ch;
for (int i = 0; i < infix.length(); i++) {
ch = infix.charAt(i);
if (!isOperator(ch))
postfix.append(ch);
else {
if (isOperator(ch))
processOperator(ch, map, stack, postfix);
else {
System.err.println("Not a statement");
while (!stack.empty())
stack.pop();
}
}
}
calculate(postfix);
}
private static void processOperator(char op, Map<Character, Integer> map, Stos stack, StringBuffer postfix){
if (stack.empty() || op == '(') {
stack.push(op);
} else {
char topOp = (char) stack.peek();
if (map.get(op) > map.get(topOp)) {
stack.push(op);
}else {
while (!stack.empty() && map.get(op) <= map.get(topOp)){
postfix.append(topOp);
stack.pop();
if (!stack.empty()) {
topOp = (char) stack.peek();
if (op != ')') {
stack.push(op);
}
}
}
}
}
}
private static boolean isOperator(char ch){
return ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%' || ch == '(' || ch == ')';
}
protected static void calculate(StringBuffer postfix){
Stos stackCalculate = new Stos(30);
int result = 0;
for (int i = 0; i < postfix.length(); i++){
char c = postfix.charAt(i);
if (!isOperator(c))
stackCalculate.push(c);
else if (isOperator(c)){
int num1 = stackCalculate.pop();
int num2 = stackCalculate.pop();
switch (c){
case '+': result = num1 + num2;
break;
case '-': result = num1 - num2;
break;
case '*': result = num1 * num2;
break;
case '/': result = num1 / num2;
break;
case '%': result = num1 % num2;
break;
}
stackCalculate.push(result);
}
}
result = stackCalculate.pop();
System.out.println(result);
}
}
Класс Stos, он же стек
package SimpleCalculator;
public class Stos implements Stack {
private int maxSize;
private int[] stackArray;
private int top;
public Stos(int s) {
maxSize = s;
stackArray = new int[maxSize];
top = -1;
}
@Override
public boolean empty() {
return (top == -1);
}
@Override
public void push(int j) {
stackArray[++top] = j;
}
@Override
public int pop() {
return stackArray[top--];
}
@Override
public int peek() {
return stackArray[top];
}
}
Интерфейс Stack
package SimpleCalculator;
public interface Stack {
boolean empty();
void push(int j);
int pop();
int peek();
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Ребята, я только осваиваю Джаву и программирование в целомПрошу помощи
Обьясните, как программа видет стандартные иконки, pdf,mpr,jpgКак при открытие он сам знал какая программа ему нужна? И как вывести меню на удержание...