我有一个.txt文件,里面装满了87个四个字母的单词。我本质上是在制作一个刽子手游戏,其中用户启动游戏,并在 0 到 86 之间生成一个随机数,然后程序转到.txt文件并挑选出该单词供用户猜测。这是我第一次尝试这样做,因为我是一名新的编程学生,我正在使用的书几乎没有帮助。所以。。。这是我为此所做的:
class ReturnRandomInteger {
public int randomInteger() {
int randomInt = 0;
for (int i = 0; i < 1; i++) {
randomInt = (int) (Math.random() * 86) + 0;
}
return randomInt;
}
public static String getWord(int randomInt, String line) {
FourLetterWords newObject = new FourLetterWords();
if (randomInt == String line)
}
}
class FourLetterWords {
public static void readFile() {
try {
String fileName = "C//FourLetterWords.txt";
File fourLetterWords = new File(fileName);
Scanner in = new Scanner(fourLetterWords);
ArrayList<FourLetterWords> words = new ArrayList<>();
while (in.hasNextLine()) {
String line = in.nextLine();
}
} catch (FileNotFoundException ex) {
System.out.println("File not found.");
}
}
}
首先,我不知道我的尝试和捕获是否正确。该文件的名称是FourLetterWords.txt。如果错误,我想知道读取.txt文件中每一行的正确方法是什么。现在在我的 ReturnRandomInteger 类中,我从我的 FourLetterWords 类创建了新对象,您可以看到我正在尝试做的是拥有它,以便如果用户生成的随机整数等于 .txt 文件中的相应行,那么它将返回该行中的单词。显然,int 不能等于字符串,那么我应该如何对应生成的整数与我拥有的.txt文件中的单词?
我将非常感谢我能得到的任何帮助。
尝试这样的事情:
String fileName = "C:\FourLetterWords.txt";
File fourLetterWords = new File(fileName);
Scanner in = new Scanner(fourLetterWords);
ArrayList<String> words = new ArrayList<String>();
while (in.hasNextLine()) {
words.add(in.nextLine());
}
现在,您的单词将存储在单词数组列表中,您可以使用随机数访问,例如:
words.get(randomNumber);
由于整个随机数部分几乎只有一行代码,并且getWord 方法在逻辑上不应该在提供随机数的类中,我把一个类放在一起来完成整个工作。
我建议也使文件名动态化(例如,向 RandomWordProvider 构造函数添加一个参数(,但决定不使用它以使其更简单一些。
class RandomWordProvider {
private List<String> words;
public RandomWordProvider() {
words = readFile();
}
private int randomInteger() {
int randomInt = (int) (Math.random() * words.size());
return randomInt;
}
public String getWord(int randomInt, String line) {
int randomPosition = randomInteger();
String randomWord = words.get(randomPosition);
return randomWord;
}
private List<String> readFile() {
List<String> wordsList = new ArrayList<>();
try {
String fileName = "C:/FourLetterWords.txt";
File fourLetterWords = new File(fileName);
Scanner in = new Scanner(fourLetterWords);
while (in.hasNextLine()) {
String line = in.nextLine();
if (line!=null && !line.isEmpty()) {
wordsList.add(line);
}
}
} catch (FileNotFoundException ex) {
System.out.println("File not found.");
}
return wordsList ;
}
}
我删除了对getWord的静态访问,因此您必须初始化对象并且文件最初会被读取。
随机整数:我更改了函数来计算它,因此它采用列表的大小,并且如果您以后想添加更多单词,它会很灵活。Math.random(( 方法永远不会返回 1,因此对于您的 87 个元素,该数字将介于 0 和(在您的示例中(86.999 之间...其中转换为 int 将只切断小数部分。
获取单词:该方法获取一个随机值作为单词列表中的位置指示器。然后,它会从您的列表中获取随机单词并最终返回它。
读取文件:几乎你已经做了什么,我添加了对空和空字符串的检查,然后将单词添加到稍后返回的数组中。据我所知,Java 不太关心你在路径中使用什么斜杠,我从依赖于操作系统的路径切换到总是在某一点使用"正常"斜杠......
这是干编码的,所以我希望我没有错过任何东西,我特别没有检查使用扫描仪读取行的整个部分...... :)为了使它更容易理解,我决定编写比必要的更多的代码行,如果需要,可以在一行中完成randomInteger((和getWord(;)
创建一个Strings
数组(假设,你把它命名为words[]
(。在程序开始时,从文件中一一行地读取行,并将它们存储在数组中(words[i++]=line
(。现在,当您需要选择一个单词时,只需执行 word = words[randomInt]
.