我遇到“java.lang.NullPointerException”问题。 此代码的目标是生成具有特定大小的数组的随机数(在这种情况下,10个数字,如驱动程序中给出的,但无关紧要),计算平均值,查找最大值,最小值和特定值数字(如驱动程序中给出的,2和3,但无关紧要)。我想我可以通过一些研究来编写所有这些代码,但是在完成所有内容并编译完成后,我尝试运行代码,令我惊讶的是,我发现了java.lang.NullPointerException。我不知道它是什么,但通过一些研究我学到了(我认为)我知道这是什么问题。我想使用“for循环”访问数组,但我不能,因为数组的值为null。我不知道为什么,我不知道这段代码中的所有错误,因为我仍在尝试运行它。我只能编译,但正如我所说,我运行时遇到了NPE问题。但是,对我来说,接收参数的构造函数和我写的方式中的“for循环”在逻辑上是可以接受的。 所以,当我跑步时,信息就是这样:
java.lang.NullPointerException at Driver.main上的ArrayLab.initialize(ArrayLab.java:19)(Driver.java:16)
我的问题是: 我的代码出了什么问题?为什么我的数组为null并且它没有在驱动程序中指定的值?如何为此数组指定值?我的构造函数有什么问题吗?那么“for循环”怎么样?我该怎么办才能修复它?
public class ArrayLab
{
private int[] ArrayNum;
public ArrayLab(int Num)
{
int[] ArrayNum = new int[Num];
}
public void initialize()
{
for (int ANUM = 0; ANUM <= ArrayNum.length; ANUM++)
{
ArrayNum[ANUM] = (int) Math.round((Math.random() * 10));
}
}
public void print()
{
System.out.println(ArrayNum);
}
public void printStats()
{
double Sum = 0;
int Max = 0;
int Min = 0;
for (int ANUM = 0; ANUM < ArrayNum.length; ANUM++)
{
Sum = Sum + ArrayNum[ANUM];
if (ArrayNum[ANUM] > ArrayNum[Max])
{
Max = ANUM;
}
if (ArrayNum[ANUM] < ArrayNum[Min])
{
Min = ANUM;
}
}
double Average = Sum/ArrayNum.length;
System.out.println("Average Value: " + Average);
System.out.println("Maximum Value: " + Max);
System.out.println("Minimum Value: " + Min);
}
public void search(int GivenNumber)
{
for (int ANUM = 0; ANUM < ArrayNum.length; ANUM++)
{
if(GivenNumber == ArrayNum[ANUM])
{
System.out.println(GivenNumber + " was found.");
}
else
{
System.out.println(GivenNumber + " was not found.");
}
}
}
}
和
public class Driver
{
public static void main(String[] args)
{
//create new instance of the ArrayLab class with parameter of 10
ArrayLab array = new ArrayLab(10);
//print out the array created by ArrayLab constructor
array.print();
//initialize the array with random values
array.initialize();
//print the randomized array
array.print();
//print stats for the array
array.printStats();
//search for 3
array.search(3);
//search for 2
array.search(2);
}
}
答案 0 :(得分:0)
在你的构造函数中,你已经声明了你的数组。所以你的实际数组没有被分配任何内存
private int[] ArrayNum;
public ArrayLab(int Num)
{
ArrayNum = new int[Num];
}