检查堆栈是否为算术级数爪哇

时间:2019-03-28 18:30:12

标签: java stack

我正在尝试检查堆栈是否也是算术级数(具有算术级数)。我不知道为什么我在这里得到一个空错误。错误指向“差异”。

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 :(得分:0)

The javadoc for peek应该可以帮助您了解为什么会抛出这种情况:

“引发EmptyStackException-如果此堆栈为空。”

请考虑将测试从s.peek() == null更改为s.isEmpty()

答案 1 :(得分:0)

由于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;
}