使用简单的Java代码(将ArrayList实现为堆栈)在运行时会出错

时间:2014-03-26 13:20:12

标签: java arraylist

我终于设法编写了我的第一个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;
    }

}

感谢您的时间!

5 个答案:

答案 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))