我终于设法编写了我的第一个Java任务。赋值的目的是使用Strings实现一个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;
}
}
感谢您的时间!
答案 0 :(得分:1)
您正在调用peek(3)
,但peek()
中的代码访问stringList.size() - 1 - i
,这是-1,因此错误。
我相信你偷看方法的条件也是错误的if (i >= 0 && i >= (stringList.size() - 1))
。你想在这做什么?
答案 1 :(得分:1)
我认为这就是错误所在:
return stringList.get(stringList.size() - 1 - i);
size = 3。 3-1-3将变为负数。改变这部分以获得所需的输出! :)
答案 2 :(得分:1)
peek方法应该返回以下内容:return stringList.get(stringList.size() - i);
当你创建peek(3)
时失败,因为你知道ArrayList只有3个值,除了i之外减去1,你试图访问位置-1上的元素
答案 3 :(得分:0)
你的问题是偷看()。我想你想要检查我是否&lt; = (stringList.size() - 1)。
if (i >= 0 && i <= (stringList.size() - 1)){
return stringList.get(stringList.size() - 1 - i);
}
答案 4 :(得分:-1)
你的if()
条件真的很奇怪我想你想放if (i >= 0 && i <= (stringList.size() - 1))