我搜索了很多页面,无法找到解决方案:
以下代码不是我自己的代码。我正在从youtube视频教程中复制它,看看我是否可以创建游戏并执行它。不幸的是,try catch异常方法说java程序Game
无法读取我的 data.txt 文件,该文件大小为1kb,并且与my {{1 }和Game
类。
此程序中包含两个 .java 文件和一个 .txt 文件。它对于在youtube上做教程的人来说就像是一个魅力,也许是因为他从命令行编译并运行它,但不适合我(我使用drJava.jar作为我的编译器并运行程序)。
当我尝试从命令行编译时,我得到5个错误,表示符号存在一些问题。它与drJava编译良好。
Game.java如下:
Question
Question.java如下:
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Game {
private static ArrayList<Question> questions = new ArrayList<Question>();
private static void init() {
try {
// This is where the problem occurs, can't read data.txt
List<String> lines = Files.readAllLines(Paths.get("data.txt"));
for (int i = 0; i < lines.size(); i += 5) {
Question q = new Question(lines.get(i), lines.get(i + 1), lines.get(i + 2), lines.get(i + 3), lines.get(i + 4));
}
} catch (Exception e) {
System.out.println("Couldn't read file data.txt. System will now exit");
System.exit(-1);
}
}
private static void loop() {
Scanner scan = new Scanner(System.in);
while (questions.size() > 0) {
Question q = questions.remove(0);
System.out.println(q.text);
for (int i = 0; i < q.answers.length; i++) {
System.out.println(i + " " + q.answers[i]);
}
int input = scan.nextInt();
if (input < 0 || input > q.answers.length - 1) {
System.out.println("input is invalid");
System.exit(-1);
}
if (q.rightAnswer.equals(q.answers[input])) {
System.out.println("Right");
} else {
System.out.println("Right");
}
}
}
public static void main(String[] args) {
init();
loop();
}
}
data.txt文件:
什么是4x4?
14个
25个
44个
24个
R在RGBA中代表什么?
红
火箭
右
路
答案 0 :(得分:2)
我对drJava一无所知,但看起来你在导入中拼错了Java.io.File包。可能是drJava忽略了这一点,因此您无法正确访问该库的代码。看看您是否可以使用System.out.println(e);
这打印了一个超出范围的索引例外。
因此索引超出范围异常意味着您正在尝试访问列表(或数组)范围之外的内容。我怀疑你的代码实际上是成功读取文件。当您尝试在之后循环遍历行时,实际上会发生错误。确保数据文件中没有空行,因为您使用的循环非常危险。用英语思考一下。只要我小于我的列表长度,做一些事情。特别是&#34;大小11&#34;让我觉得你有一个额外的行,它允许循环运行一次比它应该的运行。
答案 1 :(得分:1)
Data.txt与您的程序在同一目录中运行吗?您可能遇到查找错误目录的问题。因此,它不是能够读取文件,而是找到它的情况。
或者,如果指向正确的位置,请检查文件的权限并确保允许读取。