Есть Игра в слова :ты вписываешь в первое поле слово, программа считывает последнюю букву и во второе поле выводит слово найденное слово из текстового документа(там +-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);
}
}
}
inputFirstWord? – Nowhere Man Jan 22 '23 at 03:06