Java - Мой файл не может быть прочитан, и я не могу понять это - PullRequest
0 голосов
/ 24 апреля 2020

В настоящее время я пытаюсь написать этот код и не могу понять, почему мой файл, common-dictionary.txt, не будет читать. Он имеет простые имена, например, "aaron" и "address", но главная проблема в том, что он просто не обнаруживает это. Он всегда заканчивается словом «слово не найдено в словаре», даже если оно существует в файле common-dictionary.txt. Любая помощь будет оценена.

Вот код на данный момент:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;

public class Project_12 {

    public static void main(String[] args) throws FileNotFoundException, IOException {

        String prompt = "Enter a word or 'quit' to stop: ";

        ArrayList<String> personalDictionary = new ArrayList<String>();
        ArrayList<String> commonDictionary = new ArrayList<String>();

        // Construct a Scanner to read user input from the keyboard.
        Scanner keyboard = new Scanner(System.in);

        System.out.println("Spell Checker");
        System.out.println("-------------");

        // Perform a priming read to get the first word.
        System.out.print(prompt);
        String word = keyboard.nextLine().toLowerCase();

        // Enter the user input loop.
        while (!word.equals("quit")) {

            // Check if the word is in either dictionary.
            if (checkSpelling(word, personalDictionary, commonDictionary)) {
                System.out.println("The word is spelled correctly.");
            } 
            else {
                System.out.println("The word was not found in the dictionary.");            
                System.out.println("Would you like to add it to your personal dictionary (yes/no)?");
                String response = keyboard.nextLine().toLowerCase();

                if (response.equalsIgnoreCase("yes")) {
                    word.toLowerCase();
                    personalDictionary.add(word);
                    Collections.sort(personalDictionary);
                    System.out.println("Word added. Enter a word to 'quit' to stop");
                }
            }

            // Get the next word from the user.
            System.out.println();
            System.out.print(prompt);
            word = keyboard.nextLine().toLowerCase();
        }

        keyboard.close();
        System.out.println("Goodbye!");
    }

    public static ArrayList<String> readFile() throws FileNotFoundException {

            Scanner scan = new Scanner(new File("common-dictionary.txt"));
            ArrayList<String> commonFile = new ArrayList<String>();

            while(scan.hasNextLine());
            {
                commonFile.add(scan.nextLine());
            }
            scan.close();
            return commonFile;
        }

    // Return true if word is in either array; otherwise, return false. Note 
    // that the arrays are sorted, so binary search can be used.
    public static boolean checkSpelling(String word, ArrayList<String> personal, ArrayList<String> common) {

    if (Collections.binarySearch(common, word.toLowerCase()) >= 0) {
        return true;
    }
    if (Collections.binarySearch(personal, word.toLowerCase()) >= 0) {
        return true;
    }
        return false;
    }


    // Write the nonempty elements of an oversize array to a given file.
    public static void writeFile(ArrayList<String> personal)
            throws FileNotFoundException {

        PrintWriter writer = new PrintWriter("personal-dictionary.txt");
        Collections.sort(personal);

        int length = personal.size();

        for (int i = 0; i < length; ++i) {
            writer.write(personal.get(i));
        }

        // Close the file; otherwise, the contents will be lost.
        writer.close();
    }
}

1 Ответ

0 голосов
/ 24 апреля 2020

Метод checkSpelling всегда возвращает false, поскольку ArrayList<String> commonDictionary инициализируется как пустой список: ArrayList<String> commonDictionary = new ArrayList<String>();. Чтобы поместить содержимое файла в commonDictionary, необходимо установить для него список, возвращаемый методом readFile(), который содержит слова, хранящиеся в файле: ArrayList<String> commonDictionary = readFile();.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...