2016-01-01 2 views
-5

Я пытаюсь сделать простую программу, чтобы найти среднее число серий в текстовом документе, у меня большая часть его, но у меня возникла проблема с записью одной переменной в моей в то время как заявление. Мой код выглядит так.Java Среднее из файла

public static void processFile (String filename) throws IOException, FileNotFoundException { 
    try (BufferedReader inputReader = new BufferedReader (new InputStreamReader(new FileInputStream("scores.txt")))) { 
     String line; 
     int lineNum = countLines("scores.txt"); 
     int [] allNums = new int [lineNum]; 
     while ((line = inputReader.readLine()) != null) { 
      int i = 0; 
      allNums[i] = Integer.parseInt(line); 
      average(allNums); 
      System.out.println(allNums[i]); 

      } 

     System.out.println(average(allNums)); 
    } 
} 
public static double average(int[] avg){ 
double sum = 0; 
for (int i = 0; i < avg.length; i++) { 
    sum = sum + avg[i]; 
} 
return sum/avg.length; 
} 
`public static int countLines(String filename) throws IOException { 
    int cnt; 
    try (LineNumberReader reader = new LineNumberReader(new 
FileReader(filename))) { 
     cnt = 0; 
     String lineRead = ""; 
     while ((lineRead = reader.readLine()) != null) {} 
     cnt = reader.getLineNumber(); 
     } 
    return cnt; 
}` 

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

+0

Вы не увеличиваете 'i' в своем цикле' while'. – Atri

+0

Атри справа. Переместите 'int i = 0;' вверх, вне цикла while и поместите 'i ++;' в конец цикла. В противном случае вы просто пишете первый элемент массива снова и снова. –

ответ

1

Возьмите average(allNums); из петли. И да, вам нужно увеличить i.

Рассмотрите возможность избавиться от i, и countLines все вместе, а используя ArrayList вместо массива.

0

Изменить код:

while ((line = inputReader.readLine()) != null) { 
      int i = 0; 
      allNums[i] = Integer.parseInt(line); 
      average(allNums); 
      System.out.println(allNums[i]); 
} 

к:

int i = 0; 
while ((line = inputReader.readLine()) != null) {   
      allNums[i] = Integer.parseInt(line);   
      System.out.println(allNums[i]); 
      i++; 
} 
average(allNums); 

Вам нужно:

  • Initialize i=0 вне цикла.
  • Увеличение i внутри цикла.
  • Перемещение average(allNums); вне цикла, если вы не хотите, чтобы он печатал среднее число чисел при чтении каждого номера.

Похоже, вы хотите распечатать среднее значение после чтения каждого номера, в этом случае вы можете сохранить свою линию average(allNums); внутри цикла.

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