Есть ли способ, чтобы моя проверка орфографии работала правильно

Проблема в моем средстве проверки орфографии, которое я пытаюсь сделать. У меня есть файл словаря, который содержит большое количество слов для сравнения с пользовательским вводом, чтобы он мог обнаруживать любые возможные орфографические ошибки. Проблема с моей заключается в том, что независимо от того, что вы печатаете, всегда будет говориться, что написание неправильное, когда это не так. Есть ли какое-либо решение или лучший метод для обнаружения ошибок при продаже пользовательского ввода.

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


public class SpellChecker2 {

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

    Scanner input = new Scanner(System.in);
    System.out.println("Please enter a String"); 
    String userWord = input.nextLine();

    final String theDictionary = "dictionary.txt";

    String[] words = dictionary(theDictionary);
    boolean correctSpelling = checking(words, userWord);

if (!correctSpelling)
    {
    System.out.println("Incorrect spelling");
    }
else 
    {
    System.out.println("The spelling is correct");
    }

}

public static String[] dictionary(String filename) throws FileNotFoundException
{
    final String fileName = "dictionary.txt";

    Scanner dictionary = new Scanner(new File(fileName));
    int dictionaryLength =0;
    while (dictionary.hasNext())
    {
        ++dictionaryLength;
        dictionary.nextLine();
    }


    String [] theWords = new String[dictionaryLength];
        for ( int x = 0; x < theWords.length ; x++)


        dictionary.close();
    return theWords;
}


public static boolean checking(String[] dictionary, String userWord)
{
boolean correctSpelling = false;

    for ( int i =0; i < dictionary.length; i++)
    {
        if (userWord.equals(dictionary[i]))
        {
            correctSpelling = true;
        }
        else 
            correctSpelling = false;
    }
    return correctSpelling;
}


}

Результат, который я получаю:

           Please enter a String
           hello
           Incorrect spelling

Как видите, хотя мое написание было правильным, выдает ошибку, что написание было неправильным. Любая помощь будет здорово и спасибо заранее.

Вы никогда не добавляете слова в theWords, у вас просто есть for ( int x = 0; x < theWords.length ; x++) dictionary.close();

GBlodgett 08.02.2019 02:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

да. Возврат с checking на true. Как у вас сейчас, это может быть правдой только в том случае, если последнее слово совпадает. Нравится,

public static boolean checking(String[] dictionary, String userWord) {
    for ( int i =0; i < dictionary.length; i++) {
        if (userWord.equals(dictionary[i])) {
            return true;
        }
    }
    return false;
}

Кроме того, вам нужно заполнить dictionary, добавив слова в ваш массив. И я бы предпочел try-with-resources явным вызовам close(). Что-то типа,

public static String[] dictionary(String filename) throws FileNotFoundException {
    final String fileName = "dictionary.txt";
    int dictionaryLength = 0, i = 0;

    try (Scanner dictionary = new Scanner(new File(fileName))) {
        while (dictionary.hasNextLine()) {
            ++dictionaryLength;
            dictionary.nextLine();
        }
    }
    String[] theWords = new String[dictionaryLength];
    try (Scanner dictionary = new Scanner(new File(fileName))) {
        while (dictionary.hasNextLine()) {
            theWords[i] = dictionary.nextLine();
            i++;
        }
    }
    return theWords;
}

Другие вопросы по теме