我的选择排序算法不起作用。
我收到以下错误:
//线程“主”中的异常java.lang.NullPointerException

注意:这是针对Java类的。我没有很多经验。我已经完成任务。我想了解我的排序算法无法正常工作的原因。
关于如何解决该问题有什么建议吗?提示?
更正? ...任何帮助将不胜感激。
这是我的代码:

    private void sortFlowers(String flowerPack[]) {
        // TODO: Sort the flowers in the pack (No need to display them here) - Use Selection or Insertion sorts
        // NOTE: Special care is needed when dealing with strings! research the compareTo() method with strings


         for(int i = 0; i < flowerPack.length; i++){
         String currentMinFlow = flowerPack[i];
         int minIndex = i;

            for(int j = i; j < flowerPack.length; j++){
               if(currentMinFlow.compareToIgnoreCase(flowerPack[j]) <0){
                  currentMinFlow = flowerPack[j];
                     minIndex = j;
                  }
               }


               if(minIndex != i){
                  flowerPack[minIndex] = flowerPack[i];
                  flowerPack[i] = currentMinFlow;
               }
            }
        }


例外:

Exception in thread "main" java.lang.NullPointerException at
    java.lang.String$CaseInsensitiveComparator.compare(String.java:1181) at
    java.lang.String$CaseInsensitiveComparator.compare(String.java:1174) at
    java.lang.String.compareToIgnoreCase(String.java:1227) at
    Assignment01Driver.sortFlowers(Assignment01Driver.java:112) at
    Assignment01Driver.<init>(Assignment01Driver.java:37) at
    Assignment01Driver.main(Assignment01Driver.java:5)

最佳答案

该错误表明您正在尝试处理保留值为null的数组。为了更好地理解,请填写阵列中的所有25个点并运行程序,它不会给您任何错误。

这是您需要的解决方案。

private void sortFlowers(String flowerPack[])
{
    //get the length of the array by counting arrays where the value is not null.
    int length = 0;
    for (int i = 0; i < flowerPack.length; i++)
    {
        if (flowerPack[i] != null)
        {
             length = length + 1;
        }
    }

    //just confirm that the count is correct.
    System.out.println(length);

    //set the length to the "length" variable as we have found above.
    for(int i = 0; i < length; i++)
    {
        String currentMinFlow = flowerPack[i];
        int minIndex = i;
        for(int j = i; j < length;j++){
            if(currentMinFlow.compareToIgnoreCase(flowerPack[j]) <0)
            {
                currentMinFlow = flowerPack[j];
                minIndex = j;
            }
        }
        if(minIndex != i){
            flowerPack[minIndex] = flowerPack[i];
            flowerPack[i] = currentMinFlow;
        }
    }
}


只需将您的sortFlowers方法替换为上面的代码并检查即可。

10-08 07:53
查看更多