为什么 Arrays.sort() 在我的 arrayB 上不起作用?在main方法中java.lang.NullPoi



我目前正在做一个项目,我需要用随机生成的整数创建一个初始数组(anArray),并在另一个数组(arrayB)中精确复制这些随机值。然后我想用我的 selectionSort() 方法对第一个数组进行排序,用 Arrays.sort() 对第二个数组进行排序。我还需要计时每种排序方法需要多长时间才能完成。

到目前为止,我可以用随机整数填充第一个数组。我不确定我是否已正确将 anArray 复制到 arrayB 中,因为它没有像我到目前为止编码的那样打印。anArray 正在根据需要进行排序,并且通过 main 打印没有问题。请查看我到目前为止的代码,如果您可以建议在哪里添加排序过程的时间,那也很棒!

import java.util.Arrays;
import java.util.Random;
public class TimedSortOne
{
public static int[] anArray; // initializes the first array
public static int[] arrayB; // initializes the second array
/**
* This method produces integers of random values.
* @return int randomNum
*/
private static int randomFill()
{       
Random rand = new Random();
int randomNum = rand.nextInt();
return randomNum;        
}
private static int[] list()
{
anArray = new int[1000];
for(int i=0;i<anArray.length;i++)
{
anArray[i] = randomFill();
}
return anArray;
}
/**
* This method sorts the values of anArray into ascending order by 
* repeatedly finding the largest value and moving
* it to the last index in the array.
* @param int[] anArray
*/
private static void selectionSort(int[] anArray)
{
for (int lastPlace = anArray.length-1; lastPlace > 0; lastPlace--)
{
int maxLoc = 0;
for (int j = 1; j <= lastPlace; j++)
{
if (anArray[j] > anArray[maxLoc]) 
{
maxLoc = j;
}
}
int temp = anArray[maxLoc];
anArray[maxLoc] = anArray[lastPlace];
anArray[lastPlace] = temp;
}
}

/**
* This method populates arrayB with an exact copy
* of integer values from anArray using System.arraycopy() function.
* @param anArray
* @return arrayB
*/
private static int[] arrayCopyFull(int[] anArray)
{
int[] temp = new int[anArray.length];
System.arraycopy(anArray, 0, temp, 0, anArray.length);
return temp;
}
public static void main(String[] args)
{
list();
arrayCopyFull(anArray);
selectionSort(anArray);
System.out.println("The sorted integers in  anArray are:");
for (int numbers : anArray) {
System.out.println(numbers);
}
System.out.println("The sorted integers in arrayB are:");
for (int bNumbers : arrayB) {
System.out.println(bNumbers);
}
}
}

因此,我希望生成一个经过排序的 anArray 的打印列表,并记录对 anArray 进行排序所花费的时间。

然后,使用 arrayB 作为 anArray 中随机整数的精确副本,使用 Arrays.sort() 对数组 B 进行排序,所有这些都带有排序时间的记录。

NPE 是由于未将 arrayB 分配给数组副本的输出而导致的。

试试这个代码:

import java.util.Arrays;
import java.util.Random;
import java.util.Date;
public class TimedSortOne
{
public static int[] anArray; // initializes the first array
public static int[] arrayB; // initializes the second array
/**
* This method produces integers of random values.
* @return int randomNum
*/
private static int randomFill()
{       
Random rand = new Random();
int randomNum = rand.nextInt();
return randomNum;        
}
private static int[] list()
{
anArray = new int[1000];
for(int i=0;i<anArray.length;i++)
{
anArray[i] = randomFill();
}
return anArray;
}
/**
* This method sorts the values of anArray into ascending order by 
* repeatedly finding the largest value and moving
* it to the last index in the array.
* @param int[] anArray
*/
private static void selectionSort(int[] anArray)
{
for (int lastPlace = anArray.length-1; lastPlace > 0; lastPlace--)
{
int maxLoc = 0;
for (int j = 1; j <= lastPlace; j++)
{
if (anArray[j] > anArray[maxLoc]) 
{
maxLoc = j;
}
}
int temp = anArray[maxLoc];
anArray[maxLoc] = anArray[lastPlace];
anArray[lastPlace] = temp;
}
}

/**
* This method populates arrayB with an exact copy
* of integer values from anArray using System.arraycopy() function.
* @param anArray
* @return arrayB
*/
private static int[] arrayCopyFull(int[] anArray)
{
int[] temp = new int[anArray.length];
System.arraycopy(anArray, 0, temp, 0, anArray.length);
return temp;
}
public static void main(String[] args)
{
list();
arrayB = arrayCopyFull(anArray); //forgot to assigned to arrayB
long startTime = new Date().getTime();
selectionSort(anArray);
long endTime = new Date().getTime();
System.out.println("Time taken for selectionSort(): " + (endTime - startTime) + " seconds.");

startTime = new Date().getTime();
Arrays.sort(arrayB);
endTime = new Date().getTime();
System.out.println("Time taken for Arrays.sort(): " + (endTime - startTime) + " seconds.");

System.out.println("The sorted integers in  anArray are:");
for (int numbers : anArray) {
System.out.println(numbers);
}
System.out.println("The sorted integers in arrayB are:");
for (int bNumbers : arrayB) {
System.out.println(bNumbers);
} 
}
}

在你的代码中,数组 B 永远不会初始化。在"arrayCopyFull()"方法中使用"arrayB"代替"temp"。这将解决NPE错误。

要计算时间,请单击此处的链接。它具有可用于时间添加的详细方法。

相关内容

最新更新