2015-11-16 2 views
2

Мне нужно попросить пользователя ввести 10 баллов в цикле и записать каждый балл в файл «scores.txt», но программа завершается после ввода одного балла. Я не уверен, как заставить программу написать каждый из 10 баллов в файл.Java Writing Test Scores to File

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

Условие выхода для цикла может быть отрицательным; если отрицательный, я могу предположить, что пользователь выполнил ввод данных.

public class MoreTestScores { 

/** 
* @param args the command line arguments 
*/ 

public static void main(String[] args) throws IOException { 
    writeToFile("scores.txt"); 
    processFile("scores.txt"); 
} 

public static void writeToFile (String filename) throws IOException { 
    BufferedWriter outputWriter = new BufferedWriter(new FileWriter("scores.txt")); 
    System.out.println("Please enter 10 scores."); 
    System.out.println("You must hit enter after you enter each score."); 
    Scanner sc = new Scanner(System.in); 
    int score = 0; 
    while (score <= 10) 
    { 
     score = sc.nextInt(); 
     outputWriter.write(score); } 
} 

public static void processFile (String filename) throws IOException, FileNotFoundException { 
    double sum = 0; 
    double number; 
    double average; 
    double count = 0; 
    BufferedReader inputReader = new BufferedReader (new InputStreamReader(new FileInputStream("scores.txt"))); 
    String line; 
    while ((line = inputReader.readLine()) != null) { 
     number = Double.parseDouble(line); 
     sum += number; 
     count ++; } 
    average = sum/count; 
    System.out.println(average); 
    inputReader.close(); 
} 
+0

Вы устанавливаете 'счет' на вход. Вы не используете его в качестве счетчика. Это продолжает принимать входные данные, пока оценка не станет меньше 10, а не после 10 баллов. – Arc676

+0

хорошо любое отрицательное значение будет <= 10, поэтому ваша петля никогда не заканчивается – AbtPst

+0

также каково ваше условие выхода? должна ли программа выйти после принятия 10 значений или когда пользователь вводит отрицательное значение? – AbtPst

ответ

1

Вы должны использовать counter, чтобы следить за вход:

int count = 0; 
int score = 0; 
while (count < 10) { 
    score = sc.nextInt(); 
    if(score < 0) break; 
    outputWriter.write(score); 
    count++; 
} 

Что вы делаете с:

int score = 0; 
while (score <= 10) { 
    score = sc.nextInt(); 
    outputWriter.write(score); 
} 

всякий раз, когда вы вводите значение больше чем 10 (который я Предполагая, что вы являетесь первым входом), цикл прекратится, так как условие score <= 10 станет false.

+0

не влияет на результат отрицательной оценки – ControlAltDel

+0

@ControlAltDel благодарит за внимание, исправил его. – thegauravmahawar

0

Часть вашей проблемы вы используете один и тот же переменную как подсчитать количество входов и получить на вход

int score = 0; 
    while (score <= 10) 
    { 
     score = sc.nextInt(); 
     outputWriter.write(score); } 
} 

Было бы лучше использовать другую переменную для ввода, как

int score = 0; 
    while (score <= 10) 
    { 
     int val = sc.nextInt(); 
     if (val < 0) break; 
     outputWriter.write(val); 
     score++; 
    } 
}