无法在没有第一个索引的0的数组中添加整数

时间:2014-10-05 14:12:48

标签: java arrays add

我最初使用ArrayList。但后来我的课程老师告诉我,我不能在我的课程中使用ArrayList。他说我只能使用数组。

问题是当我向数组添加一个整数时,它只是在第一个索引上加零。

以下是代码:

int[] Bag = new int[1];
boolean isit = true;
do {
    int[] NewBag = new int[Bag.length + 1]; 
    String name = scanner.next();

    if (name.equals("A")){
        int number = scanner.nextInt();
        for (int i = 0; i < Bag.length; i++) {
            NewBag[NewBag.length - 1] = number;
            NewBag[i] = Bag[i];
        }
        Bag = NewBag;
        System.out.println(number + " added to Bag.");
    }
} while (isit == true); 

请帮帮我们。没有正确的添加操作,我无法进行最小和大小操作。

2 个答案:

答案 0 :(得分:3)

首先使用单元素数组,然后立即向其添加第二个元素:

    int[] NewBag = new int[Bag.length + 1]; 

因此,当您读取一个数字时,您的数组已经包含两个元素(即一个元素太多)。

要更正此问题,您需要更改

    int[] Bag = new int[1];

    int[] Bag = new int[0];

如果看起来很奇怪,请参阅Why does Java allow arrays of size 0?

您还需要移动

NewBag[NewBag.length - 1] = number;

离开循环。

答案 1 :(得分:0)

我不知道你想对你的数组做什么,但是如果你想把一个数组包装成一个类似于ArrayList的方法,你可以做类似的事情(介意,一旦到达数组的大小,int不会增长。):

class MyArray {
    private final int[] mArray;
    private int mSize = 0;

    public MyArray(final int maxSize) {
        mArray = new int[maxSize];
    }

    public void add(final int element) {
        if (mSize < mArray.length) {
            mArray[mSize++] = element;
        } else {
            throw new IndexOutOfBoundsException("No more room");
        }
    }

    public int get(final int index) {
        return mArray[index];
    }

    public int size() {
        return mSize;
    }
}

然后你可以做你的逻辑:

int maxSize = scanner.nextInt();
MyArray array = new MyArray(maxSize);

for(int i=0; i<maxSize; i++) {
   array.add(scanner.nextInt());
}