基本上,我的程序的目的是从文本文件中选择一个随机引号,然后根据生成的随机数打印该引号,该随机数不大于文件中的行数。我知道该文件位于正确的目录中,并且包含所有内容。
我尝试同时使用while和for循环,但是这似乎是一个问题,当循环不在其中时,代码会正确运行,但是如果没有循环,程序就不会执行我想要的操作做。另外,尝试更改某些变量的范围。
// open file
private static void openFile(){
try {
input = new Scanner(Paths.get("Quotes.txt"));
}
catch(IOException ioException){
System.err.println("Error opening file. Terminating.");
System.exit(1);
}
}
// get and print quote
private static void printQuote(){
try {
int printQue = randomNumber();
System.out.println(printQue);
for (int i = 0; i < printQue - 1; i++){
input.nextLine();
}
System.out.printf("The randomly selected quote is: %s%n",
input.nextLine());
}
catch(NoSuchElementException elementException){
System.err.println("File formed improperly. Terminating.");
}
catch(IllegalStateException stateException){
System.err.println("Error reading from file. Terminating.");
}
}
// size of list
private static int fileSize(){
try{
int counter = 0;
while (input.hasNext()){
input.nextLine();
counter++;
}
num = counter;
}
catch(NoSuchElementException elementException){
System.err.println("File improperly formed. Terminating");
}
catch(IllegalStateException stateException){
System.err.println("Error reading from file. Terminating.");
}
return num;
}
// get random number
private static int randomNumber(){
int randomNum = random.nextInt(fileSize());
while (randomNum <= 0){
randomNum = random.nextInt(fileSize());
}
return randomNum;
}
在文本文件中打印100个引号之一。
答案 0 :(得分:0)
您的扫描程序正在遍历fileSize()方法中的整个文件,因为您每次迭代都调用input.nextLine()
。
一旦进入printQuote()
,您就已经遍历了整个文件,因此您尝试在(last_index + 1)处读入一行。