2017-10-10 36 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的 –