java.lang.NullPointerException 填充数组时
java.lang.NullPointerException when filling array
目标:创建大小为 x
的随机数数组,并对数字进行排序。
Array.java
import java.util.Random;
/**
* Created by cazorla19 on 05.03.16.
*/
public class Array {
int myArray[];
Random rand;
Array() {
}
Array (int x) {
Array myArray[];
myArray = new Array[x];
for (int i=0; i<x; i++) {
myArray[i] = new Array();
}
}
int[] ArrayFill () {
for (int i=0; i<myArray.length; i++) {
int j = rand.nextInt();
myArray[i] = j;
}
return myArray;
}
int[] ArraySort (){
System.out.println ("Here is the Bubble sort!");
for (int i=0; i<myArray.length; i++) {
for (int j=0; j<myArray.length - i - 1; j++) {
if (myArray[j] > myArray[j+1]) {
int temp = myArray[j];
myArray[j] = myArray [j+1];
myArray[j+1] = temp;
}
}
}
return myArray;
}
void ArrayPrint() {
for (int i=0; i<myArray.length; i++) {
System.out.print (myArray[i] + ", ");
}
}
}
ArrayDo.java
/**
* Created by cazorla19 on 05.03.16.
*/
public class ArrayDo extends Array {
public static void main (String args[]) {
int x = 10;
Array labArray = new Array(x);
labArray.ArrayFill();
labArray.ArrayPrint();
labArray.ArraySort();
labArray.ArrayPrint();
}
}
有点例外。
Exception in thread "main" java.lang.NullPointerException
at Array.ArrayFill(Array.java:23)
at ArrayDo.main(ArrayDo.java:10)
那是我尝试使用数组长度的地方。试图通过这个问题[1] [2]弄清楚。尽管我在数组构造函数中做了,但我认为我不能从 NULL 更改数组值。有没有人强迫类似的问题?我知道这应该很容易,但仍然无法意识到问题所在。
你的构造函数毫无意义。它初始化一个不同类型的本地数组,然后初始化具有相同名称的数组成员,这意味着数组成员保持未初始化状态。
它应该只是:
Array (int x) {
myArray = new int[x];
}
您不需要 Array
个实例 (Array myArray[]
) 的数组。
问题是构造函数 Array(int x)
没有初始化 class 变量 int myArray[]
。它只初始化在构造函数中定义的局部变量数组myArray[]
。
初始化以下值,您应该可以开始了!
int myArray[]=new int[10];
Random rand=new Random();
目标:创建大小为 x
的随机数数组,并对数字进行排序。
Array.java
import java.util.Random;
/**
* Created by cazorla19 on 05.03.16.
*/
public class Array {
int myArray[];
Random rand;
Array() {
}
Array (int x) {
Array myArray[];
myArray = new Array[x];
for (int i=0; i<x; i++) {
myArray[i] = new Array();
}
}
int[] ArrayFill () {
for (int i=0; i<myArray.length; i++) {
int j = rand.nextInt();
myArray[i] = j;
}
return myArray;
}
int[] ArraySort (){
System.out.println ("Here is the Bubble sort!");
for (int i=0; i<myArray.length; i++) {
for (int j=0; j<myArray.length - i - 1; j++) {
if (myArray[j] > myArray[j+1]) {
int temp = myArray[j];
myArray[j] = myArray [j+1];
myArray[j+1] = temp;
}
}
}
return myArray;
}
void ArrayPrint() {
for (int i=0; i<myArray.length; i++) {
System.out.print (myArray[i] + ", ");
}
}
}
ArrayDo.java
/**
* Created by cazorla19 on 05.03.16.
*/
public class ArrayDo extends Array {
public static void main (String args[]) {
int x = 10;
Array labArray = new Array(x);
labArray.ArrayFill();
labArray.ArrayPrint();
labArray.ArraySort();
labArray.ArrayPrint();
}
}
有点例外。
Exception in thread "main" java.lang.NullPointerException
at Array.ArrayFill(Array.java:23)
at ArrayDo.main(ArrayDo.java:10)
那是我尝试使用数组长度的地方。试图通过这个问题[1] [2]弄清楚。尽管我在数组构造函数中做了,但我认为我不能从 NULL 更改数组值。有没有人强迫类似的问题?我知道这应该很容易,但仍然无法意识到问题所在。
你的构造函数毫无意义。它初始化一个不同类型的本地数组,然后初始化具有相同名称的数组成员,这意味着数组成员保持未初始化状态。
它应该只是:
Array (int x) {
myArray = new int[x];
}
您不需要 Array
个实例 (Array myArray[]
) 的数组。
问题是构造函数 Array(int x)
没有初始化 class 变量 int myArray[]
。它只初始化在构造函数中定义的局部变量数组myArray[]
。
初始化以下值,您应该可以开始了!
int myArray[]=new int[10];
Random rand=new Random();