有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

标记器和“线程中的异常”主“java.lang.NullPointerException”运行时错误

我试图对一个字符串进行标记,并将每个标记分配给java中的数组单元。这是我要标记化的代码,但我遇到了以下运行时错误:

Exception in thread "main" java.lang.NullPointerException

该错误出现在第10行

有人能帮我解决这个错误吗?举个例子

#1              Scanner in = new Scanner(System.in);
#2              System.out.print("Enter your name: ");
#3              String name = in.nextLine();
#4              String a[]=null;
#5              int i=0;
#6              StringTokenizer tokenizer=new StringTokenizer(name," ");
#7              while (tokenizer.hasMoreTokens())
#8              {
#9                       String token = tokenizer.nextToken();
#10                      a[i]= token;
#11                       i++;
#12             }

共 (5) 个答案

  1. # 1 楼答案

    String a[]=null;
    

    null在处理之前分配,所以NullPointerException

    试试看

    String[] a=new String[100];
    

    或者别的什么

  2. # 2 楼答案

    将数组初始化为NULL,然后设置其条目。。。当然你会得到一个NullPointerException

    必须使用成员计数初始化数组,比如String[]a=new String[10]

  3. # 3 楼答案

    String a[]=null;
    

    你在做什么

    a[i]= token; // a is pointing to null, so a[i] will throw NPE, you need to initiate it
    

    我认为您不知道数组的大小,所以选择List

    成功

    String a[]=null;
    

    List<String> a = new ArrayList<String>();
    

    替换

    a[i]= token;
    i++;
    

    a.add(token);
    

    另请参见

  4. # 4 楼答案

    字符串数组为空。在使用字符串数组之前,先创建一个新实例:

    #1              Scanner in = new Scanner(System.in);
    #2              System.out.print("Enter your name: ");
    #3              String name = in.nextLine();
    #4              String a[]; // removed '= null'
    #5              int i=0;
    #6              StringTokenizer tokenizer=new StringTokenizer(name," ");
    #6.1            a[] = new String[tokenizer.countTokens()];
    #7              while (tokenizer.hasMoreTokens())
    #8              {
    #9                       String token = tokenizer.nextToken();
    #10                      a[i]= token;
    #11                       i++;
    #12             }
    

    更多信息请参见此处:http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html#countTokens()

    更简单的解决方案是使用数组列表而不是数组。ArrayList的优点是,可以向列表中添加值,并且不必在开始时指定固定的大小,这意味着大小是可变的

    例如:

    Scanner in = new Scanner(System.in);
    System.out.print("Enter your name: ");
    String name = in.nextLine();
    List<String> list = new ArrayList<String>();
    StringTokenizer tokenizer=new StringTokenizer(name," ");
    while (tokenizer.hasMoreTokens())
    {
        String token = tokenizer.nextToken();
        list.add(token)
    }
    

    如果现在想知道列表中有多少元素,请使用list.size()

  5. # 5 楼答案

    因为您将null赋值给变量a,所以当您稍后尝试使用该变量时,它将导致NullPointerException。你需要给a分配一些有意义的内容

    下面是代码中的问题:

    String a[]=null