Java为什么在实例化数组时会出现NullPointerException
我是编程新手,当我尝试初始化n、numInt和arrayMenu时,不明白为什么程序会给我一个NullPointerException的运行时错误。这些似乎都不管用。该程序的任务是收集一组随机整数以存储在数组中,并允许用户选择要选择的排序。谢谢你的阅读Java为什么在实例化数组时会出现NullPointerException,java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,我是编程新手,当我尝试初始化n、numInt和arrayMenu时,不明白为什么程序会给我一个NullPointerException的运行时错误。这些似乎都不管用。该程序的任务是收集一组随机整数以存储在数组中,并允许用户选择要选择的排序。谢谢你的阅读 import java.util.Scanner; import java.util.Random; public class VariousSortsHS { private static int[] arrayMenu; pr
import java.util.Scanner;
import java.util.Random;
public class VariousSortsHS
{
private static int[] arrayMenu;
private static Random generator;
/**
* Constructor for objects of class VariousSortsHS.
*/
public VariousSortsHS(int n) //The error starts here
{
arrayMenu = new int[n]; //I don't get why it says null in the array when
//i am initializing the length of the array to n
/*Assigns a random number between 0 too 100.*/
for(int i = 0; i < n; i++)
{
int temp = generator.nextInt(100);
arrayMenu[n] = temp;
}
}
/**
* Selection Sort method.
*/
public static void selection(int n)
{
for(int i = 0; i < arrayMenu.length - 1; i++)
{
int minPos = i;
for(int j = i + 1; j < arrayMenu.length; j++)
{
if(arrayMenu[j] < arrayMenu[minPos]) minPos = j;
}
int temp = arrayMenu[i];
arrayMenu[i] = arrayMenu[minPos];
arrayMenu[minPos] = temp;
System.out.print(temp + " ");
}
}
/**
* Insertion Sort method.
*/
public static void insertion(int n)
{
for(int i = 1; i < arrayMenu.length; i++)
{
int next = arrayMenu[i];
int j = i;
while(j > 0 && arrayMenu[j - 1] > next)
{
arrayMenu[j] = arrayMenu[j - 1];
j--;
}
arrayMenu[j] = next;
System.out.print(next + " ");
}
}
/**
* Quick Sort method.
*/
public static void quick(int n)
{
int pivot = arrayMenu[0];
int i = 0 - 1;
int j = n + 1;
while(i < j)
{
i++; while(arrayMenu[i] < pivot) i++;
j++; while(arrayMenu[j] > pivot) j++;
if(i < j)
{
int temp = arrayMenu[i];
arrayMenu[i] = arrayMenu[j];
arrayMenu[j] = temp;
System.out.print(temp + " ");
}
}
}
/**
* Main method that allows user to input data.
*/
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Do you wish to sort random integers? (Yes or No) ");
String answer = in.next();
String answer2 = answer.toLowerCase();
do
{
/*Prompts for array length.*/
System.out.println("How many random integers do you wish to sort?");
int numInt = in.nextInt();
/*Promps for sort selection choice.*/
System.out.println("Select a sort to use: \n\t1)Selection\n\t2)Insertion\n\t3)Quick");
String sort = in.next();
String sort2 = sort.toLowerCase();
if(sort2.equals("selection"))
{
selection(numInt);
}
else if(sort2.equals("insertion"))
{
insertion(numInt);
}
else if(sort2.equals("quick"))
{
quick(numInt);
}
else
{
System.out.println("You have entered the wrong input.");
}
} while(!answer2.equals("no"));
}
}
import java.util.Scanner;
导入java.util.Random;
公营各类旅行社
{
私有静态int[]数组菜单;
专用静态随机发生器;
/**
*类VariousSortsHS的对象的构造函数。
*/
public VariousSortsHS(int n)//错误从这里开始
{
arrayMenu=new int[n];//我不明白当
//我正在将数组的长度初始化为n
/*指定一个介于0和100之间的随机数*/
对于(int i=0;i0&&arrayMenu[j-1]>next)
{
arrayMenu[j]=arrayMenu[j-1];
j--;
}
arrayMenu[j]=下一步;
系统输出打印(下一个+“”);
}
}
/**
*快速排序方法。
*/
公共静态void quick(int n)
{
int pivot=arrayMenu[0];
int i=0-1;
int j=n+1;
而(ipivot)j++;
if(i
- 代码中的所有内容都是静态的。这意味着您编写的构造函数从未被调用,数组的默认值
也从未被更改。请考虑将构造函数代码更改为静态初始化块。null
从未设置为任何值,因此它也是空的,您不能对其调用generator
nextInt
- 初始化数组是设置
而不是arrayMenu[n]
arrayMenu[i]
- 当您调用
插入(numInt)时
,调用方法publicstaticvoidinsertion(intn)
,然后尝试对(inti=1;i
但是,arrayMenu
未初始化,它为空。当您尝试调用长度时,如果为null,则会得到NullPointerException。您需要添加一个静态构造函数,并使用静态int初始化大小
//set parameter = n
public static int parameter;
static
{
arrayMenu = new int[parameter];
}
生成器
的计算结果可能为空。使用调试器和/或更好地阅读跟踪。你似乎不明白你到处都有的static
这个词是什么意思。您正在调用引用从未初始化过的静态数组的静态方法。请粘贴stacktrace。。。