2014-10-05 63 views
2

我最初使用的是ArrayList。但是然后我的课程老师告诉我,我的程序中不能使用ArrayList。他说我只能使用数组。无法将整数添加到第一个索引处没有0的数组

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

下面是代码:

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); 

请帮我家伙。如果没有正确的添加操作,我无法进行最小化和大小操作。

+0

'INT [] NewBag =新INT [Bag.length + 1];'这是为什么循环内?您正在每次迭代中创建一个新实例。 – Maroun 2014-10-05 14:14:17

+0

它只是让事情变得更糟。如果我把它从“do”循环中取出,数组只存储最后一个输入。删除第一个。 – HalilM 2014-10-05 14:15:55

回答

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; 

跳出循环。

+0

感谢您的回答!但是当我把它改为0时,如果我输入5,6,7,8它存储0,6,7,8。 – HalilM 2014-10-05 14:21:09

+0

@ user3613007:移动'NewBag [NewBag.length - 1] =数目;'圈外。 – NPE 2014-10-05 14:22:39

+0

是的,现在可以正常工作。谢谢你很多关于响应快。 – HalilM 2014-10-05 14:26:38

0

我不知道你想和你的阵列做什么,但如果你想换一个数组到的东西,有类似的方法一个ArrayList,你可以做这样的事情(记住,一旦它到达数组的大小,廉政不会成长):

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()); 
} 
相关问题