2017-10-10 37 views
-2

我需要阅读的文本文件的一部分,要求用户回答这个问题,然后打印文本文件的下一部分。例如:你如何阅读java中的文本文件的部分?

Q1) What is 1 + 1 equal to?
(1) 2
(2) 3
(3) 1
(4) 5
Q2) What is 2 + 3 equal to?
(1) 5
(2) 4
(3) 7
(4) 9
Q3) What is 2 + 8 equal to?
(1) 10
(2) 7
(3) 11
(4) 13

我要显示的第一个问题和它的多种选择回答 - (“Q1)什么是1 + 1等于(1)2(2)3(3)1(4)? 5“), 然后接受用户的输入,然后显示来自文本文件的第二个问题等等。

这是我到目前为止有:

for (int i = 0; i <= 3; i++) 
{ 
    String lines = Files.readAllLines(Paths.get("History.txt")).get(i); 
    System.out.println(lines); 
    iUserInput = keyboard.nextInt(); 
    if (iUserInput == 1) 
    { 
     iScore = iScore + 1; 
    } 
} 

这只是一个原型,但我只能得到它读了几行。之后,它停止。在这之后我不知道如何打印出另一节。

我将如何得到它的工作?

+0

[为什么“有人能帮助我吗?”不是一个实际的问题?(http://meta.stackoverflow.com/q/284236) – shmosel

+1

阅读所有行一次。然后逐个遍历所有行。您正在读取文件3次,这是不需要的。 – VHS

+1

我现在看到您的编辑。为了让程序确定用户的答案是否正确,它需要自己知道正确的答案。你的程序如何找出问题的正确答案? – VHS

回答

0

鉴于您的输入有自己的路线,在自己的行每回答每个问题,每个问题用“Q”开头,你可以做这样的事情:

Scanner scanner = new Scanner(System.in); 
List<String> lines; 
try { 
    lines = Files.readAllLines(Paths.get("History.txt")); 

    int index = 0; 
    while(index < lines.size()){ 
     do{ 
      System.out.println(lines.get(index)); 
      index++; 
     }while(index < lines.size() && !lines.get(index).startsWith("Q")); 

     System.out.println("What is your answer?"); 
     int answer = scanner.nextInt(); 
    } 

} catch (IOException e) { 
    // Problem reading the file, print the stack trace 
    e.printStackTrace(); 
} 

scanner.close(); 

但是,你的程序没办法知道哪个答案是正确的。我怀疑你要硬编码的正确答案,你在现有的代码已经完成:

if (iUserInput == 1) 
{ 
    iScore = iScore + 1; 
} 

所以,你可以有些额外的数据添加到您的文件或者是创建一个有答案,作为使用第二个文件“答案键”。然后,您将使用“答案键”来查看用户是否输入了正确的答案并采取适当的措施。

注:以上如果用户没有输入整数的java.util.InputMismatchException将抛出的代码。所以你应该以某种方式处理这种可能性 - 可能通过告诉用户他们犯了一个错误并给他们另一个尝试。您还需要验证用户输入以确保用户输入正确范围的值,即1到4(包括1和4)。

+0

非常感谢您的详细解答,但是当我使用:列表行;它给出了这个错误:类型列表不是通用的;它不能与参数 David

+0

你导入列表界面进行参数化?你使用的是什么版本的Java? –

+0

另外,还要确保您的导入是java.util.List的 –