Заполнение ArrayDeques с использованием строки, вызывающей исключение NullPointerExceptionJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Заполнение ArrayDeques с использованием строки, вызывающей исключение NullPointerException

Сообщение Гость »


В настоящее время я пытаюсь написать программу-калькулятор от исправления до пост-исправления, и пока я пытался очистить избыточный код, я обнаружил, что в зависимости от того, как я создаю свой ArrayDeque, моя программа будет реагировать по-разному, даже если массивы схожи по содержанию. Сначала я несколько раз заполнил свой ArrayDeque, используя ".add()", и это сработало нормально, но я попытался очистить его с помощью строки (чтобы я мог тестировать уравнения намного эффективнее). Все это делается в классе тестирования ниже. Я также оставил несколько комментариев, которые могут быть вам полезны.

import java.math.BigInteger; импортировать java.util.ArrayDeque; импортировать java.util.Deque; общественный класс EvaluatorTest { public static void main(String[] args) { ArrayDeque inFixEquation1 = новый ArrayDeque (); ArrayDeque inFixEquation2 = новый ArrayDeque (); // Код, отличный от DRY: по какой-то причине это не работает. Строковое уравнение = "A*(B+C)"; int temp = уравнение.длина(); for (int я = 0; я allOperators = новый HashSet < > (Arrays.asList("*", "/", "%", "+", "-", ")", "(")); for (int i = 0; i < in .size(); i++) { if (!allOperators.contains(inFix.peek())) { postFix.add(inFix.pop()); } else if (allOperators.contains(inFix.peek())) { if (inFix.peek() == "(" || StoreOperators.size() == 0 && inFix.peek() != ")") { StoreOperators.add(inFix.pop()); } else if (inFix.peek() == ")") { // Кажется, компилятор пропускает здесь, когда inFix.peek() равен ")", если я использую первый ArrayDeque, но не второй. while (storedOperators.peek() != "(") postFix.add(storedOperators.pop()); если (storedOperators.peek() == "(") хранимыеОператоры.поп(); } else if (priorityCheck(inFix.peek(),storeOperators.peek())) { while (inFix.size() > 0 && storeOperators.size() > 0 && PriorityCheck(inFix.peek(),storeOperators.peek())) postFix.add(storedOperators.pop()); StoreOperators.add(inFix.pop()); } else if (!priorityCheck(inFix.peek(),storeOperators.peek())) { StoreOperators.add(inFix.pop()); } } } for (int i = storeOperators.size(); i > 0; i--) postFix.add(storedOperators.pop()); вернуть постфикс; } public static boolean PriorityCheck(String inFix, String auxOp) { логический ответ = ложь; Map < String, Integer > opPriority = new HashMap < > () { { Вставить("-", 1); Вставить("+", 2); Вставить("^", 3); Вставить("/", 4); Вставить("*", 5); Вставить("(", 1); } }; если (opPriority.get(inFix) < opPriority.get(auxOp)) ответ = правда; обратный ответ; } } Итак, если я запущу первое уравнение ArrayDeque из класса тестирования, я получу эту ошибку, в то время как второе будет работать нормально. Знаете ли вы, почему это происходит? Я знаю, откуда берется нулевой указатель и почему он берется из этого конкретного места, но, думаю, в основном я хочу знать, почему моя программа не улавливает последнюю скобку ")" в строке 19 моего второго класса, хотя это не так. действовать таким же образом, когда я вручную создаю свой ArrayDeque без цикла for и строки.
Создано в Исправить уравнение 1 = [A, *, (, B, +, C, )] Создано в фиксированном уравнении 2 = [A, *, (, B, +, C, )] Исключение в потоке «основной» java.lang.NullPointerException в Evaluator.priorityCheck(Evaluator.java:61) в Evaluator.infixToPostfix(Evaluator.java:25) в EvaluatorTest.main(EvaluatorTest.java:31)
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»