gpt4 book ai didi

java - 实现获取 NullPointerException 的方法

转载 作者:行者123 更新时间:2023-12-01 12:39:28 24 4
gpt4 key购买 nike

我有一个访问二叉树节点的实现方法。我有一个单词类,它通过名为 TreeComparable 的接口(interface)实现此功能。

访问方法如下:

@Override
public void visit() {
System.out.printf("%-15s%-7s", getWord(), count);
pw.printf("%-15s%-7s", getWord(), count);
ObjectListNode p = list.getFirstNode();
while (p != null) {
System.out.print(((LinePosition) p.getInfo()).getLineNumber() + "-" + ((LinePosition) p.getInfo()).getPosition() + " ");
pw.print(((LinePosition) p.getInfo()).getLineNumber() + "-" + ((LinePosition) p.getInfo()).getPosition() + " ");
p = p.getNext();
}
System.out.println();
pw.println();
}

我在使用 PrintWriter 对象时遇到错误。我收到 nullPointerException。我有一个默认构造函数,它是实现此访问方法的类的一部分。

这是创建 word 对象时使用的默认构造函数。

public Word(PrintWriter pw) {
this.pw = pw;
}

如果我注释掉尝试写入文本文件的操作,一切都会正常:

@Override
public void visit() {
System.out.printf("%-15s%-7s", getWord(), count);
//pw.printf("%-15s%-7s", getWord(), count);
ObjectListNode p = list.getFirstNode();
while (p != null) {
System.out.print(((LinePosition) p.getInfo()).getLineNumber() + "-" + ((LinePosition) p.getInfo()).getPosition() + " ");
//pw.print(((LinePosition) p.getInfo()).getLineNumber() + "-" + ((LinePosition) p.getInfo()).getPosition() + " ");
p = p.getNext();
}
System.out.println();
//pw.println();
}

但是,对于此作业,我需要将输出打印到文本文件。为什么 printwriter 对象没有正确传入?感谢您的输入!

编辑:以下是我尝试调用构造函数的几个地方:

public class Query {

PrintWriter pw;

public Query(PrintWriter pw) {
this.pw = pw;
}

public void performQuery(ObjectBinaryTree t) {

Scanner userInput = new Scanner(System.in);
System.out.println("Search for word: ");
pw.println("Search for word: ");
Word word = new Word(pw);
String input = userInput.next();

do {

word = new Word(input);

if (t.searchBST(word) != null) {
ObjectTreeNode p = t.searchBST(word);
ObjectListNode q = ((Word) p.getInfo()).getList().getFirstNode();

System.out.printf("%-15s%-5s", ((Word) p.getInfo()).getWord(), ((Word) p.getInfo()).getCount());
pw.printf("%-15s%-5s", ((Word) p.getInfo()).getWord(), ((Word) p.getInfo()).getCount());
while (q != null) {
System.out.print(((LinePosition) q.getInfo()).getLineNumber() + "-" + ((LinePosition) q.getInfo()).getPosition() + " ");
q = q.getNext();
}
System.out.println("\nType 1 to exit, or press enter for new search: ");
pw.println("\nType 1 to exit, or press enter for new search: ");
input = userInput.next();
continue;
}

else
System.out.print("Word Not Found");
System.out.println("\nType 1 to exit, or press enter for new search: ");
pw.print("Word Not Found");
pw.println("\nType 1 to exit, or press enter for new search: ");
input = userInput.next();
continue;

} while (!input.equals("1"));
}

}

和:

public class Driver {

public static void main(String[] args) throws FileNotFoundException {
PrintWriter pw = new PrintWriter(new File("csis.txt"));

Word word = new Word(pw);
Xref xref = new Xref(pw);
Query query = new Query(pw);
xref.readWords();

System.out.println();
pw.println();
query.performQuery(xref.getBinaryTree());

pw.close();

}

}

编辑:Visit() 方法是此接口(interface)的一部分(不确定这是否有帮助,但是......):

public interface TreeComparable {
int compareTo(Object o);
void operate(Object o);
void visit();
}

最佳答案

问题出在这里:

String input = userInput.next();

do {

word = new Word(input);

您应该会收到有关此问题的编译时错误,但显然 Word 有一个采用 String 而不是 PrintWriter 的构造函数,并且该构造函数未正确设置 pw 。此分配丢弃了上面的(正确的)实例化:

Word word = new Word(pw);

看来您可能误解了什么是对象的静态成员,什么不是对象的静态成员。使用 PrintWriter 实例化的所有 Word 对象都带有 pw 的非空值,但其余对象则具有 null 除非你修复它。我的猜测是,您的 Word(String) 构造函数会忽略 pw 并期望它由其他调用设置 - 但事实并非如此。

关于java - 实现获取 NullPointerException 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com