Заполнение ArrayDeques с использованием строки, вызывающей исключение NullPointerException ⇐ 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)
В настоящее время я пытаюсь написать программу-калькулятор от исправления до пост-исправления, и пока я пытался очистить избыточный код, я обнаружил, что в зависимости от того, как я создаю свой 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)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Является ли заполнение памяти с не нулевыми значениями медленнее, чем заполнение ее нулями?
Anonymous » » в форуме C++ - 0 Ответы
- 0 Просмотры
-
Последнее сообщение Anonymous
-