我正在尝试检查堆栈是否也是算术级数(具有算术级数)。我不知道为什么我在这里得到一个空错误。错误指向“差异”。
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;
}
答案 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;
}