2013-10-25 3 views
0

Я пытаюсь читать ввод из текстового файла, который будет отформатирован, как это:Чтение следующей строки в текстовом файле

2 80 97 
5 69 79 89 99 58 
7 60 70 80 90 100 0 59 

Первый номер каждой строки число «классов» в "раздел."

Я получил свою программу, чтобы прочитать один раздел, но я не могу понять, как заставить его читать, сколько будет секций, а затем прочитать следующую строку.

Я думаю, что я могу поместить свой текущий код в цикл, контролируемый счетчиком, который сначала прочитает, сколько секций есть, и запустил цикл много раз. Я просто не знаю, как преобразовать эту идею в код.

Вот revevant код раздела:

public static void main(String args[]) throws Exception 
{ 
    Scanner in = new Scanner(new File("prog2test.txt")); 

    //int sections = (in.nextInt()); 
    int scores = (in.nextInt()); 
    int scoresForAverage = scores; 
    int scoreTotals = 0; 
    double average = 0; 
    int A = 0; 
    int B = 0; 
    int C = 0; 
    int D = 0; 
    int F = 0; 

    int highest = 0; 
    int lowest = 100; 
    while (scores > 0 && in.hasNextInt()) 
    { 
    int grade = in.nextInt(); 
    if (grade >= 90) 
     A++; 
    else if (grade >= 80) 
     B++; 
    else if (grade >= 70) 
     C++; 
    else if (grade >= 60) 
     D++; 
    else 
     F++; 

    if (grade > highest) 
     highest = grade; 
    if (grade < lowest) 
     lowest = grade; 

    scores--; 
    scoreTotals = (scoreTotals + grade); 
    } 

    average = scoreTotals/scoresForAverage; 

    System.out.println("Scores for section 1"); 
    System.out.println("A's: " + A); 
    System.out.println("B's: " + B); 
    System.out.println("C's: " + C); 
    System.out.println("D's: " + D); 
    System.out.println("F's: " + F); 
    System.out.println("Lowest score: " + lowest); 
    System.out.println("Highest score: " + highest); 
    System.out.println("Average: " + average); 

EDIT: обновление с полным методом.

+0

Вы используете сканер? –

ответ

1

Поскольку вы знаете, что первый ИНТ в каждой строке Isnt сорта, вы можете сохранить каждую строку с помощью someString = in.nextLine() в то время как in.hasNextLine(), а затем перебрать каждую сохраненную строку, пропустив первое целое число, используя новый Scanner экземпляр для каждой строки.

+0

Я попробовал это и получил его на работу. Большое спасибо! Мне пришлось переместить все переменные во внутренний цикл и создать новую «секцию», отличающуюся от внешнего цикла, если кто-либо читает это любопытно. – coinbird

0

Если вы используете сканер, вы можете использовать метод hasNext();

Это будет верно, если в тексте есть строки, разделенные пробелом.

+0

Спасибо. Я думаю, мне придется поместить многие из моих переменных в цикл while, чтобы они сбросили для каждого нового раздела. Я обновил свой пост с полным методом. – coinbird

+0

Проблема заключается в том, что вы не можете сказать, что такое класс, и каково количество оценок в каждом разделе. Это неизбирательно, поскольку вы не можете сказать, когда вы меняете строки. –

0

Вы можете прочитать всю строку, а затем использовать метод String.split, чтобы разбить это на массив с помощью разделителя пробелов.

После прочтения строки:

String grades[] = line.split(" "); 

Затем вы можете использовать цикл for как таковой ...

for(int i=1; i<grades.length; ++i) { 
//start an index 1 to skip the non-grade first number on line 
    int grade = parseInt(grades[i]); 
    if (grade >= 90) 
     A++; 
    //etc on down the line 
} 

И содержат весь этот процесс в while цикле перебрать все строки ,

Смежные вопросы