在函数中使用时初始化数组?

时间:2014-01-05 21:40:37

标签: java arrays function initialization

我的代码存在问题。

函数setListSize用于通过用户输入设置数组的大小,只要它在[1-50]的范围内。

函数中的代码在不在函数中时起作用,但是当我将代码放入函数内部时,我不断被要求初始化listA。

试图做

int [] listA = null; 

然后我收到Null Pointer Exception错误。

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

    }

}

我能做些什么来使这项工作好吗?

感谢您阅读

4 个答案:

答案 0 :(得分:3)

你不想传入数组(注意它是一个数组而不是一个List,它们是不同的东西):

public void setListSize () {

您想要设置您的成员数组:

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

答案 1 :(得分: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

答案 2 :(得分:1)

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

问题是将变量传递给函数将无法分配给该变量;实际上你传递的值为null。并且在函数中有一个用null初始化的局部变量list

答案 3 :(得分:1)

你应该了解Java内部的作用。

当你有一个方法(int []数组)

你为变量赋值:array = new int [size],Java创建一个新数组并将变量'array'指向新数组。

因此,如果要为方法之外的字段分配值,则应该执行此操作。直接调用listA并为其赋值。