#java #file #class #arraylist
#java #файл #класс #arraylist
Вопрос:
Я пишу класс, который считывает содержимое текстового файла (dictionary.txt ) и использует метод isValidWord, который возвращает true или false в зависимости от того, образуют ли буквы, введенные пользователем, слово в текстовом файле
Буквы, введенные пользователем, поступают через объекты «Tile» (я написал класс Tile, в котором есть метод getLetter, который возвращает букву). Итак, ArrayList объектов Tile передается методу isValidWord.
Конструктор принимает строку имени файла (программа-драйвер передает ее dictionary.txt ). Затем конструктор считывает содержимое файла в ArrayList строк.
Метод isValidWord принимает ArrayList объектов Tile. Каждый объект tile содержит букву, поэтому я использую метод getLetter из класса Tile, чтобы получить букву каждого объекта tile при добавлении его к строке.
Затем я пытаюсь прочитать текстовый файл, dictionary.txt и посмотреть, содержит ли файл строку из предыдущей части; если это так, isValid имеет значение true.
private boolean isValid;
private String str;
private ArrayList<String> list = new ArrayList<String>();
public Dictionary(String fileName) throws IOException
{
File file = new File(fileName);
Scanner s = new Scanner(file);
while (s.hasNextLine())
{
list.add(s.nextLine());
}
str = "";
isValid = true;
}
public boolean isValidWord(ArrayList<Tile> tiles) throws IOException
{
StringBuilder sb = new StringBuilder();
for(int i=0; i< tiles.size(); i )
{
sb.append(tiles.get(i).getLetter());
}
str = sb.toString();
File file = new File("dictionary.txt");
Scanner s = new Scanner(file);
while (s.hasNextLine())
{
String line=s.nextLine();
if(line.contains(str))
{
isValid = true;
}
else
isValid = false;
}
return isValid;
}
Моя проблема в том, что, несмотря ни на что, isValidWord всегда возвращает false . Я протестировал переменную str (которая действительно печатает строку, буквы из формы объектов плитки), но по какой-то причине оператор if никогда не выполняется
Ответ №1:
Удалите временную isValid
переменную; даже если файл содержит слово, если вы не вернетесь немедленно, ваша следующая итерация сделает это false
(и вам это не нужно). Нравится,
while (s.hasNextLine())
{
String line=s.nextLine();
if(line.contains(str))
{
return true;
}
}
return false;