2013-10-17 77 views
0

我之前問過類似的問題,但我無法弄清楚問題所在。我是編程新手,對如何通過將其初始長度設置爲變量來更改數組的長度感到困惑,但它並未更新。如何更改數組的長度

我的代碼:

import java.util.Scanner; 

class computer{ 

    int g = 1; //create int g = 2 
    int[] compguess = new int[g]; //set array compguess = 2 

    void guess(){ 

     int rand; //create int rand 
     int i; //create int i 
     rand = (int) Math.ceil(Math.random()*10); // set rand = # 1-10 
     for (i = 0; i < compguess.length; i++){  // start if i < the L of the []-1 (1) 

      if(rand == compguess[i]){ //if rand is equal to the Ith term, break the for loop 
       break; 
      } 
     } //end of for loop 
     if(i == compguess.length - 1){ //if i is = the length of the [] - 1: 
      compguess[g - 1] = rand; // set the new last term in the [] = rand 
      g++; // add 1 to the length of the [] to make room for another int 
      System.out.println(compguess[g - 1]); // print the last term 
     } 
    } 
} 

public class game1player2 { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     computer computer1 = new computer(); // create new computer object 
     for(int a = 0; a < 3; a++){  // start if a < 3 
      computer1.guess();  // start guess method 
      for(int n = 0; n < computer1.compguess.length; n++) //print the contents of [] 
      System.out.println(computer1.compguess[n]);  // print out entire array 
     } 
     { 
      input.close(); 
     } 
    } 
} 
+1

回到上一個問題,您根本不需要更改數組的長度。既然你只想知道1和10之間的數字是否已經被猜測過,就有一個長度爲10的**布爾型**數組。如果數字「n」被猜測出來,則將數組的值設置在索引'n - 1'爲真。如果數組中的值已經爲true,則不要再猜測它。 –

+1

當您的數組長度未知時,使用ArrayList –

回答

0

你不能改變Java中的數組的長度。您需要創建一個新的並複製這些值,或使用ArrayList

2

在Java中創建數組後,無法更改數組的長度。相反,必須分配一個新的更大的數組,並且必須複製這些元素。幸運的是,List接口的實現已經爲您做了幕後工作,其中最常見的是ArrayList

顧名思義,ArrayList包裝了一個數組,提供了通過如add()remove()(請參閱前面鏈接的文檔)的方法添加/刪除元素的方法。如果內部數組填滿,則會創建一個大1.5倍的新數組,舊元素將被複制到它,但這些對您來說都是隱藏的,這非常方便。

1

我建議使用arrayList來代替。它會根據需要調整大小。在導入java.util.ArrayList後使用ArrayList<Integer> list=new ArrayList<>();創建它。

您可以按如下方式設置值。要在位置i設定值的值VAL,使用方法:

list.set(i, val); 

您可以添加到年底與list.add(someInt);int foo=list.get(position)檢索。

僅通過將數組複製到較大數組的方式來「調整數組大小」是可能的。 仍然生成一個新的數組,而不是在適當的地方操作。 intInteger轉換在這裏通過自動裝箱處理。

+2

調整數組大小是不可能的。您的腳註不涉及調整預分配數組的大小,而是創建一個* new *更大的數組。 – arshajii

+0

@arshajii對不起。修正在編輯中添加。 – hexafraction

0

正如其他人指出的,不要使用數組,請使用ArrayList。