2014-01-05 27 views
0

我對這段代碼有問題。在函數中使用時初始化數組?

函數setListSize用於通過用戶輸入設置數組的大小,只要它在[1-50]的範圍內即可。

函數中的代碼在不在函數中時工作,但當我將代碼放入函數中時,我總是被要求初始化listA。

試圖做

int [] listA = null; 

,但後來我得到空指針異常錯誤。

int [] listA; 


setListSize(listA); 



public static void setListSize (int [] list) { 

    Scanner reader = new Scanner (System.in); 

    while (true) { 

     System.out.print("Enter array size for between [1-50]: "); 
     int listSize = Integer.parseInt(reader.nextLine()); 

     if (listSize > 50 || listSize < 1) { 

      System.out.println("Array size must be between [1-50]"); 

     } else { 

      list = new int [listSize]; 
      break; 
     } 

    } 

} 

請問我能做些什麼?

感謝您閱讀

+1

閱讀關於作用域,變量名稱shadowing和將參數傳遞給方法。 –

+1

另外,數組長度不能改變。所以你所能做的就是創建一個新的,不同的數組(這是你在代碼中做的)。使用方法中的返回值來使用新數組。 – SJuan76

回答

3

你不想在陣列傳遞(注意,這是一個數組不是一個名單,他們是不同的東西):

public void setListSize() { 

你想設置up您的成員陣列:

 listA = new int [listSize]; 

在將數組傳遞給函數之前,只將該數組的引用覆蓋到僅用於該函數的數組。你需要做的是修改對主要對象中數組的引用,爲此listA需要是靜態的(所以靜態方法可以訪問它),或者setListSize需要是非靜態的。

爲了使這個功能一般這樣做:

public static int[] createList() { 

    Scanner reader = new Scanner (System.in); 

    while (true) { 

     System.out.print("Enter array size for between [1-50]: "); 
     int listSize = Integer.parseInt(reader.nextLine()); 

     if (listSize > 50 || listSize < 1) { 

      System.out.println("Array size must be between [1-50]"); 

     } else { 

      return new int [listSize]; 
     } 

    } 

} 

然後在您的通話功能只是做:

listA = createList(); 
listB = createList(); 

+0

但我也有其他陣列我想要使用此功能 像listB – user3116280

+0

請參閱已編輯的答案。 –

1
public static int[] setListSize() { 
    ... 
    return new int[listSize]; 

的問題是,傳遞變量一個函數將不能分配給該變量;實際上你傳遞的是null值。並且在函數中有一個用null初始化的局部變量list

2

您需要將數組設置爲靜態,而不是將它傳遞給函數。傳入它確實會創建數組,但它只存在於函數的生命週期中。這工作:

import java.util.Scanner; 

public class SetListSize { 
    private static int [] listA; 

    public static final void main(String[] igno_red) { 
     SetListSize.setListSize(); 
     for(int i : listA) { 
     System.out.println(i); 
     } 
    } 

    public static void setListSize() { 

     Scanner reader = new Scanner (System.in); 

     while (true) { 
      System.out.print("Enter array size for between [1-50]: "); 
      int listSize = Integer.parseInt(reader.nextLine()); 

      if (listSize > 50 || listSize < 1) { 

       System.out.println("Array size must be between [1-50]"); 

      } else { 
       //Reference the array statically 
       SetListSize.listA = new int [listSize]; 
       break; 
      } 
     } 
    } 
} 

輸出:

[C:\]java SetListSize 
Enter array size for between [1-50]: 12 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
1

你應該明白什麼Java那樣裏面。

當你有一個方法(INT []數組)

你分配的東西給變量:數組=新INT [尺寸],Java的創建新的數組,並指向變量「陣列」到新的陣列。

所以,如果你想爲方法外的字段賦值,你應該這樣做。直接調用listA併爲其分配一個值。