【发布时间】:2020-06-04 11:57:01
【问题描述】:
我正在使用 Arraylist 编写堆栈实现。当数组为空时尝试弹出时,我尝试使用 NoSuchElementException 但我收到构建错误消息,我不知道发生了什么。这是我得到的输出:
please enter your number:
1 f
*********************Stack ArrayList Implementation*********************
false
1
1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:422)
at java.util.ArrayList.get(ArrayList.java:435)
at StackUsingArrayList.peek(StackUsingArrayList.java:42)
at StackUsingArrayList.main(StackUsingArrayList.java:74)
C:\Users\alsrb\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 4 seconds)
这部分似乎是问题所在,有趣的是,如果我不使用异常抛出,它就可以正常工作。
int pop() {
if (!isEmpty()) { // checks for an empty Stack
int popValue = stackList.get(stackList.size() - 1);
stackList.remove(stackList.size() - 1); // removes the poped element
return popValue;
} else {
throw new NoSuchElementException();
//System.out.print("The stack is already empty ");
//return -1;
}
}
有人请帮助我。 这是我的全部代码
import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class StackUsingArrayList{
Scanner scanner = new Scanner(System.in);
ArrayList<Integer> stackList;
StackUsingArrayList() {
stackList = new ArrayList<>();
}
void push(int v) {
stackList.add(v);
}
int pop() {
if (!isEmpty()) { // checks for an empty Stack
int popValue = stackList.get(stackList.size() - 1);
stackList.remove(stackList.size() - 1); // removes the poped element
return popValue;
} else {
throw new NoSuchElementException();
//System.out.print("The stack is already empty ");
//return -1;
}
}
boolean isEmpty() {
if (stackList.get(0) == null){
return true;
} else {
return false;
}
}
int peek() {
return stackList.get(stackList.size() - 1);
}
int size(){
int i = 0;
while(stackList != null){
stackList.get(i);
i++;
}
return i;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StackUsingArrayList myStack = new StackUsingArrayList();
System.out.println("Please enter your number: ");
while(scanner.hasNextInt()){
int x = scanner.nextInt();
if(x >= 0){
myStack.push(x);
}
}
System.out.println("*********************Stack ArrayList Implementation*********************");
System.out.println(myStack.isEmpty());
System.out.println(myStack.peek());
System.out.println(myStack.pop());
System.out.println(myStack.peek());
System.out.println(myStack.pop());
System.out.println(myStack.peek());
System.out.println(myStack.pop());
}
}
【问题讨论】:
-
真的很奇怪。异常似乎在主要的
peek调用中,异常文本表示您正在尝试访问-1 数组元素。唯一的可能是stackList.size()是0。我假设您输入了足够的整数来执行main中的pop呼叫号码。尝试调试。
标签: java exception stack throw