Проверка, является ли стек арифметическим рядом | Джава - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь проверить, является ли стек также арифметическим рядом (имеет арифметическую прогрессию). Я не могу понять, почему я получаю нулевую ошибку здесь. Ошибка указывает на "diff".

public static boolean isArithmetic(Stack<Integer> s) {

    if (s == null)
        return true;

    int diff = s.pop() - s.peek(); // Get difference

    while (!s.isEmpty()) {
        int x = s.pop(); 

        if ((s.peek() == null))
            return true;
        if (x - s.peek() != diff) 
            return false;
    }
    return true;

}

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Поскольку класс java.util.Stack на самом деле является Vector, вы можете легко это сделать без изменения стека.

public static boolean isArithmetic(Stack<Integer> s) {
    if (s.size() <= 1)
        return false; // or true?
    int diff = s.get(1) - s.get(0);
    for (int i = 2; i < s.size(); i++)
        if (s.get(i) - s.get(i - 1) != diff)
            return false;
    return true;
}
0 голосов
/ 28 марта 2019

Javadoc для просмотра должен помочь вам понять, почему это происходит:

"Выдает исключение EmptyStackException - если этот стек пуст."

Попробуйте изменить тест с s.peek() == null на s.isEmpty()!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...