当前位置: 首页 > 面试题库 >

NullPointerExcetion本机方法访问器…散列单词问题

南宫鸿晖
2023-03-14
问题内容

我正在编写一个读取文件并排序“单词”的项目。这段代码可以正确编译,但是却给了我一个空指针异常。有任何想法吗?

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Hashtable;

public class Lab {
   Hashtable<String, Word> words = new Hashtable<String, Word>();

   public void addWord(String s, int i) {
      if (words.containsKey(s)) {
         words.get(s).addOne();
         words.get(s).addLine(i);
      } else {
         words.put(s, new Word(s));
         words.get(s).addLine(i);
      }
   }

   public void main(String[] args) {
      System.out.println("HI");
      File file = new File("s.txt");
      int linecount = 1;
      try {
         Scanner scanner = new Scanner(file);
         System.out.println("HUH");

         while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            while (line != null) {
               String word = scanner.next();
               addWord(word, linecount);
            }
            linecount++;

         }
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      }
   }
}

异常的堆栈跟踪为:

java.lang.NullPointerException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:27‌​1)

问题答案:

这个while循环很奇怪:

while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    while (line != null) {
       String word = scanner.next();
       addWord(word, linecount);
    }
    linecount++;
}

如果您的输入文件是:

a
b

然后scanner.nextLine()将是return a,然后scanner.next()将是return
b,因为nextLine将返回下一个以行尾分隔的String,并next返回输入文件中的下一个标记。这真的是您想要的吗?我建议尝试一下:

while (scanner.hasNextLine()) {{
    String word = scanner.nextLine();
    addWord(word, linecount);

    linecount++;
}

请记住,这仅在每行只有一个单词的情况下有效。如果您想每行处理多个单词,则需要更长的时间:

while (scanner.hasNextLine()) {{
    String line = scanner.nextLine();

    Scanner lineScanner = new Scanner(line);
    while(lineScanner.hasNext()) {
        addWord(lineScanner.next(), linecount);
    }

    linecount++;
}


 类似资料:
  • 在@inheritage类型Joined中 我有班级成员、员工和学生 因此,当我保存Employee或Student记录,然后检索Person记录时,它给我的鉴别器列值为NULL,但在重新启动服务器后,它给我相应的值 如果我手动设置鉴别器列值的值,然后保存和检索,那么它会给我这个值(我需要手动设置鉴别器列值吗?)那么使用鉴别器列有什么好处呢 为什么我不应该使用一个具有列类型的employee和st

  • 以下是启动本地计算机kubernetes集群的指南:http://kubernetes.io/v1.0/docs/gett-started-guides/docker.html 我用。yaml文件创建了各种POD,一切正常,我可以使用容器IPs访问nginx和mysql(172.17.x.x范围内,使用docker0),但是当我创建服务时,服务IPs在10.0.0.x范围内,其他容器无法访问。 k

  • 问题内容: 因此,我对“ setter”和“ getter”方法以及它们的有用与否有疑问。 假设我只是写了一个非常基本的程序,如下所示: 然后,假设我编写了另一个使用此“ Account”类的类,如下所示: 等等等 在编写时,我正在“ Account”类中更改变量“ name”的值。我可以按照自己喜欢的方式随意编写多次代码。但是,引起我注意的是,更好的做法是将“ Account”类中的变量设为私有

  • 我有一个问题,我希望你能帮忙,因为我是哈希和哈希引用的东西的新手? 我有以下数据结构: 如果我想访问关键中的所有URL,以便我可以对URL执行一些其他操作,那么访问这些元素的正确或首选方法是什么? 例如,我将以下面的URL结束,然后我可以在< code>foreach循环中对这些URL执行操作: -编辑- 用于访问上面所示数据结构中进一步向下的元素的代码: 使用上面的代码,为什么会出现以下错误?

  • 以下图片: 当我运行这个命令时,我可以在http://localhost:4444/上看到Selenium 任何帮助让这两种方式中的任何一种有效。

  • 我正在使用Codename One,试图在我的应用程序中提供一种方式,通过本机接口访问设备mfg名称和型号。我看了教程,它似乎很容易,但是当我右键单击界面并选择“Generate Native Access”时,我得到了一个。我尝试了clean/compile,但仍然得到了错误。有人能提供任何关于这可能是什么的信息吗?以下是完整的堆栈跟踪: IllegalName:com/tsi/gpflow/n