我的代码存在问题。
函数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;
}
}
}
我能做些什么来使这项工作好吗?
感谢您阅读
答案 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并为其赋值。