【发布时间】:2014-03-26 13:20:12
【问题描述】:
我终于写出了我的第一个 Java 作业。分配的重点是实现一个带有字符串的 ArrayList,它的行为应该像一个堆栈。
但是,当我在 Eclipse 中运行代码时,我得到了某种错误提示:
Exception in thread "main" øv2.Stack@c723704
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at øv2.Stack.peek(Stack.java:30)
at øv2.Stack.main(Stack.java:47)
我不知道为什么会这样,这是我的代码:
public class Stack {
private ArrayList<String> stringList = new ArrayList<String>();
RandomStringGenerator rsg = new RandomStringGenerator();
private void push(String i){
stringList.add(i);
}
private String Pop(){
if (stringList.size() >= 1){
String positionInArray = stringList.get(stringList.size() - 1);
stringList.remove(stringList.size() - 1);
return positionInArray;
}
else {
return null;
}
}
private String peek(int i){
if (i >= 0 && i >= (stringList.size() - 1)){
return stringList.get(stringList.size() - 1 - i);
}
else{
return null;
}
}
private int getSize(){
return stringList.size();
}
public static void main (String [] args){
Stack stack = new Stack();
stack.push("1");
stack.push("2");
stack.push("3");
System.out.println(stack);
System.out.println(stack.peek(3));
System.out.println(stack.Pop());
System.out.println(stack);
}
}
import java.util.Random;
public class RandomStringGenerator {
private int randomNumber;
private Random randomNumberGenerator = new Random();
public String randomStringGenerator(){
int randomNumber = randomNumberGenerator.nextInt();
String randomString = Integer.toString(randomNumber);
return randomString;
}
}
感谢您的宝贵时间!
【问题讨论】:
-
Java 对他们的错误消息非常好。您正尝试在方法
peek的第30 行访问索引位置-1。想想你在做什么,为什么会这样。 -
i >= 0 && i >= (stringList.size() - 1)这没有意义,你的范围检查有缺陷。 -
你还应该检查
stringList.size() > 0