-6

我要做的是从最终用户那里获取输入并将其写入一个名为dictionary.txt的文件。然后我试图检查最终用户输入的单词是否已经在 dictionary.txt 文件中,因为我不想重复。如果该词不在字典中,那么它将存储在 dictionary.txt 中。我遇到的问题是一个compilation error告诉我的问题Project3.java:81: not a statement FileWriter aDictionary = new FileWriter("dictionary.txt", true);

public static void addNewWord()throws IOException
{
    String newWord = "";
    newWord = JOptionPane.showInputDialog(null, "Enter the word you want to add to your dictionary.");
    String aLineFromFile = "";
    String filename = "dictionary.txt";
    ArrayList<String> dictionary = new ArrayList<String>();
    File resultsFile = new File(filename);
    Scanner inFile = new Scanner(resultsFile);

    while(inFile.hasNext())
         aLineFromFile = inFile.nextLine();
         if (aLineFromFile.startsWith(newWord))
         {
            dictionary.add(aLineFromFile);
            JOptionPane.showMessageDialog(null, "Word already is dictionary");
            addNewWord();
                 }

 else
    FileWriter aDictionary = new FileWriter("dictionary.txt", true);
    PrintWriter out = new PrintWriter(aDictionary);
    out.println(newWord);
    out.close();
    aDictionary.close();

  return;
}

我已导入java.io.*; javax.swing.*; java.awt.Dimension; java.util.*; 如果有人能告诉我为什么会收到此错误并告诉我如何解决它,我将不胜感激。

4

5 回答 5

3

不要忘记缩进,这有助于查看缺少的大括号和范围。

这应该会更好:

public static void addNewWord() throws IOException {
    String newWord = JOptionPane.showInputDialog(null, "Enter the word you want to add to your dictionary.");
    String filename = "dictionary.txt";
    File resultsFile = new File(filename);
    Scanner inFile = new Scanner(resultsFile);
    List<String> dictionary = new ArrayList<String>();
    while (inFile.hasNext()) {
        String aLineFromFile = inFile.nextLine();
        if (aLineFromFile.startsWith(newWord)) {
            dictionary.add(aLineFromFile);
            JOptionPane.showMessageDialog(null, "Word already is dictionary");
            addNewWord();
        } else {
            FileWriter aDictionary = new FileWriter("dictionary.txt", true);
            PrintWriter out = new PrintWriter(aDictionary);
            out.println(newWord);
            out.close();
            aDictionary.close();
        }
    }
}
于 2013-04-02T11:34:13.497 回答
1

将 else 代码放在这个{}块中

像这样

else{
         FileWriter aDictionary = new FileWriter("dictionary.txt", true);
         PrintWriter out = new PrintWriter(aDictionary);
         out.println(newWord);
         out.close();
         aDictionary.close();
      }
于 2013-04-02T11:33:51.703 回答
0

使用以下修改后的代码。在 while 循环和 else 块之后你错过了大括号

public static void addNewWord() throws IOException {
    String newWord = "";
    newWord = JOptionPane.showInputDialog(null, "Enter the word you want to add to your dictionary.");
    String aLineFromFile = "";
    String filename = "dictionary.txt";
    ArrayList<String> dictionary = new ArrayList<String>();
    File resultsFile = new File(filename);
    Scanner inFile = new Scanner(resultsFile);

    while (inFile.hasNext()) {
        aLineFromFile = inFile.nextLine();
        if (aLineFromFile.startsWith(newWord)) {
            dictionary.add(aLineFromFile);
            JOptionPane.showMessageDialog(null, "Word already is dictionary");
            addNewWord();
        } else {
            FileWriter aDictionary = new FileWriter("dictionary.txt", true);
            PrintWriter out = new PrintWriter(aDictionary);
            out.println(newWord);
            out.close();
            aDictionary.close();
        }
    }
}
于 2013-04-02T11:35:30.707 回答
0

这是您的代码,但这只是您的问题的开始:

    public static void addNewWord() throws IOException {
        String newWord;
        newWord = JOptionPane.showInputDialog(null, "Enter the word you want to add to your dictionary.");
        String aLineFromFile = "";
        String filename = "dictionary.txt";
        ArrayList<String> dictionary = new ArrayList<String>();
        File resultsFile = new File(filename);
        Scanner inFile = new Scanner(resultsFile);
        while (inFile.hasNext()) {
            aLineFromFile = inFile.nextLine();
            if (aLineFromFile.startsWith(newWord)) {
                dictionary.add(aLineFromFile);
                JOptionPane.showMessageDialog(null, "Word already is dictionary");
                addNewWord();
            } else {
                FileWriter aDictionary = new FileWriter("dictionary.txt", true);
                PrintWriter out = new PrintWriter(aDictionary);
                out.println(newWord);
                out.close();
                aDictionary.close();
            }
        }
    }

我认为它的构思很糟糕。没有充分的理由将这样的功能与 UI/Swing 类混合。将两者分开,否则如果没有 Swing UI,您将永远无法使用此方法。这称为分层或关注点分离。

于 2013-04-02T11:37:07.310 回答
0

更好的格式:

public static void addNewWord()throws IOException {

    String newWord = "";
    newWord = JOptionPane.showInputDialog(null, "Enter the word you want to add to your dictionary.");
    String aLineFromFile = "";
    String filename = "dictionary.txt";
    ArrayList<String> dictionary = new ArrayList<String>();
    File resultsFile = new File(filename);
    Scanner inFile = new Scanner(resultsFile);

    while (inFile.hasNext()) {
        aLineFromFile = inFile.nextLine();
        if (aLineFromFile.startsWith(newWord)) {
            dictionary.add(aLineFromFile);
            JOptionPane.showMessageDialog(null, "Word already is dictionary");
            addNewWord();
        }

        else {
            FileWriter aDictionary = new FileWriter("dictionary.txt", true);
            PrintWriter out = new PrintWriter(aDictionary);
            out.println(newWord);
            out.close();
            aDictionary.close();
        }
    }

    return;
}

为代码块保留 4 个字符的缩进,即使您必须使用空格键和删除键单独执行此操作(而不是使用为您执行此操作的编辑器)。从长远来看,它可以节省您的时间。

于 2013-04-02T11:38:03.577 回答