2015-10-06 3 views
2

Я работаю над заданием для класса, и я застрял в самом начале. Я не уверен, как идти о пользовательском вводе, я подробно расскажу, когда я расскажу вам, что такое назначение ....String Arrays и BufferedReader

Первый вход будет ответом на тест из десяти ответов T или F , Затем он вводит пользовательский ввод для первого и последнего имени учащихся, ID #, а затем отвечает на «викторину» T/F, пользователь вводит столько студентов, сколько захочет, а затем «ZZZZ» завершает работу. Все входные данные пользователя вводятся в одну запись, и именно там у меня возникают проблемы.

Пример ввода для программы:

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:

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 и все входа вводится все вместе. Проблема, с которой я сталкиваюсь, - я не знаю, как это сделать. Сначала я решил, что я разделил бы вход на новую строку и создаю массив, где каждый индекс является новой строкой, но теперь у меня только печатает «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

Используйте этот код внутри основной()

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

Это дает исключение из-за пределов ... Кроме того, мой профессор будет буквально отмечать очки, если мы используем Break в наших циклах, а не в шутку. – NoobCoderChick

+0

Это прекрасно работает !! и приходите на человека, вы можете просто изменить логику if, чтобы устранить разрыв. В какой строке вы получаете исключение? –

+0

Эта строка .... \t if (inputArr [i + 3] .equalsIgnoreCase (отвечает [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/ –