2014-10-05 64 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()); 
} 
相關問題