0

Есть Игра в слова :ты вписываешь в первое поле слово, программа считывает последнюю букву и во второе поле выводит слово найденное слово из текстового документа(там +-60000 слов) на эту букву Через консоль все работает, но как сделать чтоб работало в с интерфейсом графическим

package org.example;

import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Scanner; import java.util.Set;

public class WordGame {

public static void main(String[] args) throws IOException {
    WordGame game = new WordGame();
    System.out.println(game.run());
}

long score = 0;
Scanner scanner = null;
Scanner in = null;
File file = new File("russian_nouns.txt");
private final Set<String> repeatedWords = new HashSet<>();

public String run() throws FileNotFoundException {
    String myWord;
    String fileWord;

    myWord = inputFirstWord();//первое слово вводит пользователь
    while (true) {
        if (isInputedWordCorrect(myWord) && !isWordInListOfRepeat(myWord)) {// проверка введенного слова на корректность и повтор
            score++;//после каждого введенного слова прошедшего условия добавляется +1 в счет
            addToListOfRepeat(myWord); //добавляет введенное слово в список повторов
            fileWord = getWordFromFileOnChar(getLastChar(myWord));//ищет слово на заданную букву в файле
            if (fileWord.isEmpty()) {//если слова в списке на данную букву закончились функция вернет ""
                return ("you win. your score is " + score);//слова в списке на данную букву закончлись
            } else {
                System.out.println("Word from file: " + fileWord);
                addToListOfRepeat(fileWord);//добавляет слово из файла в список повторов
                myWord = inputWord(getLastChar(fileWord));//пользователь вводит слово
                if (!IsWordStartWith(myWord, getLastChar(fileWord))) {
                    return ("you lose. your score is " + score);//первая буква не подходит
                }
            }
        } else {
            return ("you lose. your score is " + score);//слово либо уже было, либо его нет в списке
        }
    }
}

boolean IsWordStartWith(String word, char firstChar) {//проверяет начинается ли слово с заданной буквы
    return word.charAt(0) == firstChar;
}

String getWordFromFileOnChar(char firstChar) throws FileNotFoundException {//ищет в списке слово, начинающееся с заданной букввы(также отсеивает повторы)
    scanner = new Scanner(file);
    String word = "";
    while (scanner.hasNextLine()) {
        word = scanner.nextLine();

        if (IsWordStartWith(word, firstChar) && !isWordInListOfRepeat(word)) {//слово которое начинает с новой буквы и не повторяется
            // System.out.println(word);
            break;
        }
    }
    if (IsWordStartWith(word, firstChar) && !isWordInListOfRepeat(word)) {//если цикл выше не находит подходящего слова, он остановится на последнем в списке, поэтому еще одна проверка
        scanner.close();
        return word;
    } else {
        scanner.close();
        return "";
    }
}

boolean isWordInListOfRepeat(String word) {//есть ли слово в списке тех, которые уже были
    return repeatedWords.contains(word);
}

void addToListOfRepeat(String word) {
    repeatedWords.add(word);
}

char getLastChar(String word) {
    return word.charAt(word.length() - 1);
}

String inputFirstWord() {
    System.out.println("Input first word: ");
    in = new Scanner(System.in, StandardCharsets.UTF_8);
    return in.nextLine();
}

String inputWord(char firstChar) {
    System.out.println("Input your word on char " + firstChar + ": ");
    in = new Scanner(System.in, StandardCharsets.UTF_8);
    return in.nextLine();
}


boolean isInputedWordCorrect(String inputedWord) throws FileNotFoundException {//проверяет есть ли слово в списке(существует ли такое слово)

    scanner = new Scanner(file);

    while (scanner.hasNextLine()) {
        String nextWord = scanner.nextLine();

        if (nextWord.equals(inputedWord)) {
            scanner.close();
            return true;
        }
    }
    scanner.close();
    System.out.println("the entered word is incorrect.");
    return false;
}


}

Я пытался что-то сделать, но после нажатия на кнопку приложение крашится

import javax.swing.*;
import java.awt. event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main extends JFrame implements ActionListener { JFrame frame = new JFrame("Слова"); JTree tree = new JTree(); JLabel slowa = new JLabel("Слова"); JButton button = new JButton("Обрабоать"); JTextField textField = new JTextField(); JTextField textField2 = new JTextField();

Main() {
    frame.setLayout(null);
    frame.setVisible(true);
    frame.setBounds(300, 300, 700, 400);
    textField.setBounds(200, 100, 300, 40);
    frame.add(textField);
    slowa.setBounds(320, 50, 300, 40);
    frame.add(slowa);
    button.setBounds(300, 250, 100, 50);
    frame.add(button);
    textField2.setBounds(200, 160, 300, 40);
    frame.add(textField2);
    button.addActionListener(this);

}


public static void main(String[] args) throws FileNotFoundException {
    new Main();
}
long score = 0;
Scanner scanner = null;
Scanner in = null;
File file = new File("russian_nouns.txt");
private final Set<String> repeatedWords = new HashSet<>();

public String run(String myWord) throws FileNotFoundException {

    String fileWord;

    myWord = inputFirstWord();//первое слово вводит пользователь
    while (true) {
        if (isInputedWordCorrect(myWord) && !isWordInListOfRepeat(myWord)) {// проверка введенного слова на корректность и повтор
            score++;//после каждого введенного слова прошедшего условия добавляется +1 в счет
            addToListOfRepeat(myWord); //добавляет введенное слово в список повторов
            fileWord = getWordFromFileOnChar(getLastChar(myWord));//ищет слово на заданную букву в файле
            if (fileWord.isEmpty()) {//если слова в списке на данную букву закончились функция вернет ""
                return ("you win. your score is " + score);//слова в списке на данную букву закончлись
            } else {
                System.out.println("Word from file: " + fileWord);
                addToListOfRepeat(fileWord);//добавляет слово из файла в список повторов
                myWord = inputWord(getLastChar(fileWord));//пользователь вводит слово
                if (!IsWordStartWith(myWord, getLastChar(fileWord))) {
                    return ("you lose. your score is " + score);//первая буква не подходит
                }
            }
        } else {
            return ("you lose. your score is " + score);//слово либо уже было, либо его нет в списке
        }
    }
}

boolean IsWordStartWith(String word, char firstChar) {//проверяет начинается ли слово с заданной буквы
    return word.charAt(0) == firstChar;
}

String getWordFromFileOnChar(char firstChar) throws FileNotFoundException {//ищет в списке слово, начинающееся с заданной букввы(также отсеивает повторы)
    scanner = new Scanner(file);
    String word = "";
    while (scanner.hasNextLine()) {
        word = scanner.nextLine();

        if (IsWordStartWith(word, firstChar) && !isWordInListOfRepeat(word)) {//слово которое начинает с новой буквы и не повторяется
            // System.out.println(word);
            break;
        }
    }
    if (IsWordStartWith(word, firstChar) && !isWordInListOfRepeat(word)) {//если цикл выше не находит подходящего слова, он остановится на последнем в списке, поэтому еще одна проверка
        scanner.close();
        return word;
    } else {
        scanner.close();
        return "";
    }
}

boolean isWordInListOfRepeat(String word) {//есть ли слово в списке тех, которые уже были
    return repeatedWords.contains(word);
}

void addToListOfRepeat(String word) {
    repeatedWords.add(word);
}

char getLastChar(String word) {
    return word.charAt(word.length() - 1);
}

String inputFirstWord() {
    textField.setText("Input first word: ");
    in = new Scanner(System.in, StandardCharsets.UTF_8);
    return in.nextLine();
}

String inputWord(char firstChar) {
    textField.setText("Input your word on char " + firstChar + ": ");
    in = new Scanner(System.in, StandardCharsets.UTF_8);
    return in.nextLine();
}


boolean isInputedWordCorrect(String inputedWord) throws FileNotFoundException {//проверяет есть ли слово в списке(существует ли такое слово)

    scanner = new Scanner(file);

    while (scanner.hasNextLine()) {
        String nextWord = scanner.nextLine();

        if (nextWord.equals(inputedWord)) {
            scanner.close();
            return true;
        }
    }
    scanner.close();
    System.out.println("the entered word is incorrect.");
    return false;


}


@Override
public void actionPerformed(ActionEvent e) {
    String myWord = textField.getText();
    try {
        textField2.setText(run(myWord));
    } catch (FileNotFoundException ex) {
        throw new RuntimeException(ex);
    }
}

}

0 Answers0