所以这是代码,它的目的是从列表中随机给出一个词,让用户输入外部文本文件中的含义,如果正确,则从列表中删除该词,否则保留单词并将其添加到 missedWord 列表中。问题是单词没有从列表中删除,而且我似乎无法打印 ArrayList。谁能帮我解决这个问题?另外,我可以对代码进行任何改进吗?感谢您的所有帮助。
import java.io.*;
import java.util.*;
public class WordList1 {
public static void main(String[] args) throws IOException{
boolean fart = true;
FileReader fr = new FileReader("WL1.txt");
BufferedReader br = new BufferedReader(fr);
Scanner console = new Scanner(System.in);
ArrayList wordArray = new ArrayList();
ArrayList missedWords = new ArrayList();
String input, stringArray[] = new String[2], answer;
while((input=br.readLine())!=null){
stringArray = input.split(" ");
wordArray.add(stringArray);
}
while(fart){
stringArray = (String[]) wordArray.get((int)(Math.random()*(wordArray.size())));
System.out.println(stringArray[0]);
answer = console.nextLine();
if(answer.equalsIgnoreCase(stringArray[1])){
System.out.println("CORRECT");
wordArray.remove(stringArray[1]);
}
if(!answer.equalsIgnoreCase(stringArray[1])){
System.out.println("INCORRECT, " + stringArray[1]);
missedWords.add(stringArray[0]);
}
if(answer.equalsIgnoreCase("escape")){
fart = false;
System.out.println(missedWords);
}
if(answer.equalsIgnoreCase("print"))
System.out.println(wordArray);
}
}
最佳答案
System.out.println(wordArray)
将在您的 ArrayList
上调用 .toString()
,它会为您提供有关引用,但不是列表中的数据。您需要写出列表中的每个元素,而不是列表对象本身:
System.out.println("Words in the array:");
for (String eachWord : wordArray) {
System.out.println(eachWord);
}
现在,这仅在您已将列表正确定义为字符串列表时才有效。此定义创建任何 Java 对象的列表:
ArrayList wordArray = new ArrayList();
最好指定列表中的元素类型。这是通过使用泛型完成的:
ArrayList<String> wordArray = new ArrayList<>();
假设您的 wordArray
实际上是一个单词列表,但是您的代码将一个整个数组 添加到 wordArray
列表。那给你什么?我想你想要这个:
while((input=br.readLine())!=null){
stringArray = input.split(" ");
// Add each word, not the array
wordArray.addAll(Arrays.asList(stringArray));
}
你的单词没有被删除的问题是一个类似的问题。您的 ArrayList 包含一个字符串数组,但您正试图删除一个字符串。调用 .remove()
不会在您的 ArrayList 中找到字符串。
关于java - 词汇学习程序无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084058/