java - 不知道为什么我收到 NullPointerException 错误

标签 java nullpointerexception

所以我正在运行一个程序,对字符串数组执行各种操作。其中之一是在数组中插入字符串并对其进行排序。我可以使用排序方法,但是当我尝试插入字符串然后对其进行排序时,我收到 NullPointerException。这是代码:

    import java.util.Scanner;
    import java.io.*;

    public class List_Driver
    {
        public static void main(String args[])
        {
            Scanner keyboard = new Scanner(System.in);
            int choice = 1;
            int checker = 0;
            String [] words = new String[5];
            words[0] = "telephone";
            words[1] = "shark";
            words[2] = "bob";
            ListWB first = new ListWB(words);
            int menu = uWB.getI("1. Linear Seach\n2. Binary Search\n3. Insertion             in Order\n4. Swap\n5. Change\n6. Add\n7. Delete\n8. Insertion Sort\n9. Quit\n");
            switch(menu)
            {
                //other cases
                case 3:
                {
                    String insert = uWB.getS("What term are you inserting?");
                    first.insertionInOrder(insert);
                    first.display();
                }//not working
                break;

                }//switch menu
        }//main
    }//List_Driver

uWB 是一个基本的 util 驱动程序。它没有任何问题。这是 ListWB 文件本身:

    public class ListWB
    {
    public void insertionSort()
        {
            for(int i = 1; i < size; i++)
        {
        String temp = list[i];
        int j = i;
        while(j > 0 && temp.compareTo(list[j-1])<0)
        {
            list[j] = list[j-1];
            j = j-1;
        }
        list[j] = temp;
        }
    }
    public void insertionInOrder(String str)
    {
            insertionSort();
        int index = 0;
        if(size + 1 <= list.length)
        {
            while(index < size && str.compareTo(list[index])>0)
                    index++;
            size++;
            for (int x = size -1; x> index; x--)
                list[x] = list[x-1];
            list[index] = str;
        }
        else 
            System.out.println("Capacity Reached");
    }//insertioninorder
}//ListWB

我该如何解决这个问题?

最佳答案

您有一个包含 5 个字符串的数组,但只初始化了其中 3 个。其余的指向 null(因为您没有初始化它们):

  String [] words = new String[5];
  words[0] = "telephone";
  words[1] = "shark";
  words[2] = "bob";
  words[3] = null;
  words[4] = null;

第一行仅初始化数组本身,而不初始化包含的对象。

但是插入会迭代所有 5 个元素。当 i 为 3 时,temp 为 null。因此 temp.compareTo 语句会抛出 NullPointerException。

 for(int i = 1; i < size; i++)
    {
    String temp = list[i];
    int j = i;
    while(j > 0 && temp.compareTo(list[j-1])<0)

解决方案:同时在 while 循环中检查 temp 是否为 null。或者根本不使用字符串数组,而是使用自动调整大小的数据结构列表 java.util.ArrayList。

关于java - 不知道为什么我收到 NullPointerException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973918/

相关文章:

java - 为什么此照明代码仅适用于单个灯光,而当我添加多个灯光时会中断?

java - Android bm.copy NullPointerException

java - StringUtils vs!=空

java - 为什么我的 View 数组返回 null?

java - Java-在多节点环境中记录最佳实践

java - Java 7 HashMap 中单个条目(键值对)的内存开销是多少? (使用 64 位 Oracle Hotspot JVM)

java - 类中的空指针异常(代码看起来不错)Java

nullpointerexception - SonarQube Runner 在分析过程中抛出 NullPointerException

java - 在已经安装了 OpenJdk 的情况下安装 Sun Java 的步骤是什么?

java - 如何使用 Gson 从 JSON 输出访问特定元素