gpt4 book ai didi

java catch block 导致多个输出

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

我编写了一个程序来接受来自文本文件的输入,并按升序显示文件中的单词,不重复。如果没有抛出异常,则输出正确。如果抛出异常,则要求用户提供有效的输入,并重复初始方法。当发生这种情况并且最终输入有效输入时,输出会重复。

我知道有些东西没有被重置,但我不知道它是什么。

public void go() {
getWords();
System.out.println(wordList);
wordList = new ArrayList<String>(new HashSet<String>(wordList));
Collections.sort(wordList);
System.out.println(wordList);
}

void getWords() {
try {
File file = new File(getInput());
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while ((line = reader.readLine()) != null) {
addWord(line);
}
} catch(Exception ex) {
System.out.println("Invalid file name, try again.");
go();
}
}

void addWord(String lineToParse) {
String[] tokens = lineToParse.split("\\s");
for(int i = 0; i < tokens.length; i++) {
wordList.add(tokens[i]);
}
}

最佳答案

当您从 catch block 调用 go() 时,您会忘记原始的 go() 调用仍在堆栈中。它不会仅仅因为您再次调用该方法而消失。本质上,您正在执行一些意外的递归。

因此,在这种情况下,您将第二次调用 go(),它将按正常方式执行,然后堆栈将“展开”并执行第一次调用的剩余部分go方法,打印出单词表,排序,然后再次打印出来。

一个快速解决方法可能是让 getWords() 返回一个 boolean 值(如果抛出异常则为 false),然后只需将第一行更改为 while(!getWords()); .

关于java catch block 导致多个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24877550/

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