2014-02-18 6 views
0

Я пишу программу, которая использует 30 классов из файла и вычисляет наименьшие, высшие и средние оценки. Мне трудно понять, как написать оператор цикла, который читает каждый класс и обновляет наименьший/самый высокий класс и добавляет это значение к сумме перед чтением следующего сорта.Java: Как читать значения из .txt-файла

import java.io.*; 
import java.util.*; 

public class MidtermStat { 
    public static void main(String[] args) throws IOException { 
     Scanner in = new Scanner(new FileReader("grades.txt")); 
     int lowest = 50; 
     int highest = 50; 
     int sum = 0; 

     int i; 
     for (i = 0, i < 30, i++){ 
      if (grade < lowest) 
       lowest = grade; 
      if (grade > highest) 
       highest = grade; 
     } 

     double average = sum/30; 

     System.out.println("The average score is: " + average); 
     System.out.println("The highest score is: " + highest); 
     System.out.println("The lowest score is: " + lowest); 

     in.close(); 
    } 
} 

Спасибо понял это:

import java.io.*; 
import java.util.*; 

public class MidtermStat { 
    public static void main(String[] args) throws IOException { 
     Scanner in = new Scanner(new FileReader("grades.txt")); 
     int lowest = 50; 
     int highest = 50; 
     int sum = 0; 

     int i; 
     for (i = 0; i < 30; i++){ 
      int grade = in.nextInt(); 
      if (grade < lowest) 
       lowest = grade; 
      if (grade > highest) 
       highest = grade; 
      sum += grade; 
     } 

     double average = (sum/30.0); 

     System.out.println("The average score is: " + (int)(average * 100)/100.0); 
     System.out.println("The highest score is: " + highest); 
     System.out.println("The lowest score is: " + lowest); 

     in.close(); 
    } 
} 
+2

Это 'суммы/30' является целочисленным делением. –

+0

Typecast, чтобы удвоить среднюю = (двойную) сумму/30; – SoulRayder

+0

Вам нужно что-то прочитать из файла и обновить значения из цикла ... – MadProgrammer

ответ

0

ли что-то вроде этого:

for(i=0;i<30;i++){ 
     **float grade = in.nextFloat();** 
     if(grade<lowest) lowest = grade; 
     else if(grade>highest) highest = grade; 

     sum+=grade; 

    } 

Не забудьте изменить все "Int" вы использовали для "поплавка" для точности.

+0

Спасибо, это помогло мне разобраться. – ChaCol

+0

добро пожаловать. Отметьте этот вопрос как решаемый :) –

+0

Как это сделать? – ChaCol

0

Я хотел бы предложить вам пойти на забуференном читателя.

Для например

BufferedReader br = new BufferedReader(new FileReader("FilePath")) 

выше заявление даст вам исключение, и вы должны справиться с этим.

while ((Line = br.readLine()) != null) { 
// your statements.. 
} 

Счастливого кодирование

+0

Почему он не может продолжать использовать сканер, который он уже создал, объект, который легче читать в цифрах? Почему вы рекомендуете, чтобы он перешел на BufferedReader? –

+0

ya Я забыл упомянуть .. вы не заботитесь о своей сумме и более того. В этом сценарии мы можем считать, что каждый балл задается по строкам. например 63 и так далее ... – User27854

+0

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

0

Используйте это, если ваш файл содержит поплавки дорожим

, а (Ь = in.hasNextFloat())

{ 
     s = s1.nextFloat(); 
     sum += s; 
    } 

Пожалуйста, имейте в виду, что если вы принимаете входные данные из файла, то лучше использовать BufferdReader, поскольку файл сохраняется на диске, который медленный по сравнению с нашей программой. Поэтому при чтении из файла лучше использовать некоторый поток низкого уровня. для получения более подробной информации вы можете обратиться:

http://docs.oracle.com/javase/tutorial/essential/io/buffers.html

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