2015-10-06 60 views
2

我正在爲類的任務工作,並且我一開始就卡住了。我不知道如何去用戶輸入,我會詳細闡述,當我告訴你什麼是任務....字符串數組和緩衝讀取器

第一個輸入將是一個測驗答案的十個T或F答案。然後它將用戶輸入作爲學生的姓名和ID#,然後回答T/F的「測驗」,用戶輸入儘可能多的學生,然後輸入「ZZZZ」終止。所有用戶輸入都輸入到一個條目中,這就是我遇到的問題。

的程序的一個例子的輸入:輸入

123-45-6789 Bill Bobb 10 
974-38-7643 Mary Lou 9 
213-45-8679 Sam Bobb 5 
315-27-4986 Joe Bobb 10 

The average score is 8.5 

我們必須使用的BufferedReader和所有的輸入的:

1 T T T T T F T T F F 
Bobb, Bill 123456789 T T T T T F T T F F 
Lou, Mary 974387643 F T T T T F T T F F 
Bobb, Sam 213458679 F T F T f t 6 T F f 
Bobb, Joe 315274986 t t t t t f t t f f 
ZZZZ 

這將產生輸出: 結果測驗1一次全部。我遇到的問題是我不知道如何處理輸入。起初,我想我會用新行分割輸入,並創建一個數組,其中每個索引是新行,但我現在只打印「ZZZZ」,我不明白爲什麼?我也不知道如何去比較第一個索引(答案鍵)和所有學生的答案。一旦我通過換行符分割輸入,我可以將空間中的每個索引分割出來嗎?任何幫助是極大的讚賞!請記住我對Java很新。

我有什麼至今(我知道它的不是很多,但我只是卡住右前面)....

public class CST200_Lab4 { 

public static void main(String[] args) throws IOException { 

    String inputValue = " "; 
    String inputArr[] = new String[13]; 
    String answerKey = null; 
    String numStudents[]; 

    InputStreamReader ISR = new InputStreamReader(System.in); 
    BufferedReader BR = new BufferedReader(ISR); 


    while(!(inputValue.equalsIgnoreCase("ZZZZ"))) { 
     inputValue = BR.readLine(); 
     inputArr = inputValue.split("\\r+"); 
     answerKey = inputArr[0];   
    } 
    System.out.println(answerKey);  
} 

}

回答

2

使用此代碼中的main()

String inputValue = " "; 
    String inputArr[] = new String[13]; 
    String answerKey = null; 
    String numStudents[]; 

    InputStreamReader ISR = new InputStreamReader(System.in); 
    BufferedReader BR = new BufferedReader(ISR); 

    try { 
     inputValue = BR.readLine(); 
     String answers[] = inputValue.split(" "); 
     int count = 0; 
     System.out.println(); 
     while((inputValue = BR.readLine()) != null) { 
      if (inputValue.equalsIgnoreCase("ZZZZ")) 
       break; 
      inputArr = inputValue.split("\\s+"); 
      System.out.print(inputArr[2] + " "); 
      System.out.print(inputArr[1] + " "); 
      System.out.print(inputArr[0].split(",")[0] + " "); 
      count = 0; 
      for(int i = 0; i <10; i++){ 
       if(inputArr[i+3].equalsIgnoreCase(answers[i+1])) 
        count ++; 
      } 
      System.out.print(count); 
      System.out.println(); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  

} 

我已經離開了的平均部件爲您計算。不要提。

+0

這是一個索引越界異常....此外,如果我們在while循環中使用Break,而不是開玩笑,那麼我的教授會逐字地標出分數。 – NoobCoderChick

+0

這工作正常!並且來到男人你可以修改if邏輯來消除中斷。什麼行oyu獲得例外? – 2015-10-06 05:23:03

+0

此行.... \t if(inputArr [i + 3] .equalsIgnoreCase(answers [i + 1])) – NoobCoderChick

1

我只是在這裏輸入這個代碼,所以有可能是拼寫錯誤,你應該驗證它。但這是一種做法。

如果使用ArrayList存儲學生的詳細信息,則不需要知道學生的數量。 ArrayList的大小是動態的。

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

import java.util.ArrayList; 

public class CST200_Lab4 { 

public static void main(String[] args) throws IOException { 

    String inputValue = ""; 
    ArrayList<String[]> students = new ArrayList<String[]>() 
    String[] answerdarr; 

    BufferedReader BR = new BufferedReader(new InputStreamReader(System.in)); 

    //first line is always the answers 
    String answers = BR.readLine(); 
    answerArr = answers.split(" "); 

    while(!(inputValue.equalsIgnoreCase("ZZZZ"))) { 
     inputValue = BR.readLine(); 

     //add extra array element so we can later use it to store score 
     inputValue = inputValue + " Score"; 

     String[] inputArr = inputValue.split(" "); 

     int studentTotal = 0; 

     for(int i = 3, i < inputArr.length; i++) { 

      if(inputArr[i].equals["T"]) { 

      studentTotal++; 
     } 
    } 

    //previous value of this is "Score" as we set earlier 
    inputArr[13] = studentTotal; 
    students.add(inputArr); 
    } 

    //Now do your printing here... 
    } 
} 
+0

哦,這是有道理的答案是第一個輸入。我還沒有學習ArrayLists,但我會檢查出來。任何想法爲什麼我沒有被新行分裂成單獨的元素? – NoobCoderChick

+0

你能澄清你的意思嗎? –

+0

如果你的意思是string.split,看看這個教程 - http://examples.javacodegeeks.com/core-java/lang/string/java-string-split-example/ –

相關問題