我有一个.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不能等于一个String,所以我应该如何将生成的整数与我所拥有的.txt文件中的单词对应?
我非常感谢能得到的任何帮助。
答案 0 :(得分:2)
尝试这样的事情:
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());
}
现在您的单词将存储在单词arraylist中,您可以使用随机数字访问:
words.get(randomNumber);
答案 1 :(得分:1)
由于整个随机数部分几乎只有一行代码,并且getWord方法在逻辑上不应该在提供随机数的类中,所以我将一个类放在一起来完成整个工作。
我建议将fileName设置为动态(例如,向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的静态访问,因此您必须初始化该对象,并且最初会读取该文件。
<强> randomInteger:强> 我更改了计算它的功能,所以它采用了列表的大小,如果你想稍后添加更多的单词,它是灵活的。 方法Math.random()将永远不会返回1,因此对于87个元素,数字将介于0和(在您的示例中)86.999之间...其中,转换为int将仅截断小数部分。
<强>屏幕取词:强> 该方法取出随机值作为单词列表中的位置指示符。 然后它会从列表中获取随机单词并最终返回。
<强> READFILE:强> 几乎你已经做了什么,我添加了一个null和空字符串的检查,然后它将该字添加到稍后返回的数组。 据我所知,Java并不关心你在路径中使用什么斜线,我从依赖于操作系统的路径切换到始终使用&#39; normal&#39;在某一点上削减......
这是干编码的,所以我希望我没有错过任何东西,我特别没有检查整个部分使用扫描仪阅读线... :) 为了使它更易于理解,我决定编写一些代码行,而不是必要的,如果需要,randomInteger()和getWord()可以在一行中完成;)
答案 2 :(得分:0)
创建一个Strings
数组(假设您将其命名为words[]
)。在程序开始时,逐个读取文件中的行,并将它们存储在数组中(words[i++]=line
)。现在,当您需要选择一个单词时,只需执行word = words[randomInt]
。