2014-01-11 6 views
3

Мне нужно прочитать текстовый файл на Java, разделить его содержимое на отдельные массивы, а затем вычислить среднее значение для определенных массивов. Моя проблема в том, что когда я пытаюсь отобразить определенный массив, чтобы убедиться, что он работает, я получаю «нуль» вместо всего списка. Может ли кто-нибудь помочь мне найти, где я ошибся?Java чтение различных массивов в текстовом файле

import java.io.*; 

class ReadFile { 
    public static void main(String args[]) 
     String[] id = new String[1234]; // random number just for initialization 
     String[] name = new String[1234]; 
     String[] asg1 = new String[1234]; 
     String[] asg2 = new String[1234]; 

     try { 
      String sCurrentLine; 
      FileReader fr = new FileReader("Information.txt"); 
      BufferedReader textReader = new BufferedReader(fr); 

      int i; 
      String[] array = null; 

      // Read file in separate parts and remove commas 
      while ((sCurrentLine = textReader.readLine()) != null) { 
       array = sCurrentLine.split(","); 
       System.out.print(array[0]); 
       System.out.print(array[1]); 
       System.out.print(array[2]); 
       System.out.println(array[3]); 
      } 

      // enter variables from each line in separate arrays 
      for (i = 0; i < array.length; i++) { 
       id[i] = array[0]; 
       name[i] = array[1]; 
       asg1[i] = array[2]; 
       asg2[i] = array[3]; 
      } 

      System.out.println(name[i]); 
      // "null" appears instead of all the names 

      textReader.close(); 
     } catch (Exception e) { 
      // Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 
    } 
} 

вход выглядит следующим образом:

ID, name, Asg1, Asg2 
123456, Max, 98.00, 80.00 
, James, 40.00, 69.00 
234567, Mary, 78.00, 88.00 

ответ

2

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

Вместо

//Read file in separate parts and remove commas 
while ((sCurrentLine = textReader.readLine()) != null) { 
    array = sCurrentLine.split(","); 
    System.out.print(array[0]); 
    System.out.print(array[1]); 
    System.out.print(array[2]); 
    System.out.println(array[3]);    
} 

//enter variables from each line in separate arrays 
for (i = 0; i < array.length; i++) { 
    id[i] = array[0]; 
    name[i] = array[1]; 
    asg1[i] = array[2]; 
    asg2[i] = array[3]; 
} 

вы, вероятно, хотите что-то вроде

int i = 0; 
while ((sCurrentLine = textReader.readLine()) != null) { 
    array = sCurrentLine.split(","); 
    id[i] = array[0]; 
    name[i] = array[1]; 
    asg1[i] = array[2]; 
    asg2[i] = array[3]; 
    i++; 
} 

Это также верно, что к тому времени, когда вы достигнете System.out.println в текущем коде, он будет равен одному прошлому - последний индекс, который вы заполнили, но это более низкая проблема.

3

Reason ваш код дает вам нулевой, потому что значение i является array.length на следующую строку.

System.out.println(name[i]); 

Рассмотрим следующий пример:

int i; 
for(i=0;i<5;i++) 
{ 
    System.out.println(i); 
} 
System.out.println("value of i outside loop: "+i); 

Выход:

0 
1 
2 
3 
4 
value of i outside loop: 5 

Таким образом, вы пытаетесь получить значение в index 5, который является нулевым.

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

for (i = 0; i < array.length; i++) 
{ 
    System.out.println(id[i] +":"+ name[i] +":"+ asg1[i] +":"+asg2[i]); 
} 

[Примечание: если ваш размер массива не исправить, то вы можете использовать ArrayList для хранения данных, который имеет динамический (grow-able) arraysize.]

1

Я предполагаю, что ваш файл Information.txt и ReadFile.java в одном пакете по умолчанию я редактировал свою программу так:

import java.io.*; 

class ReadFile { 
public static void main(String args[]) { 

    String[] id = new String[1234]; // random number just for initialization 
    String[] name = new String[1234]; 
    String[] asg1 = new String[1234]; 
    String[] asg2 = new String[1234]; 

    try { 

     String sCurrentLine; 
     FileReader fr = new FileReader(ReadFile.class.getResource(
       "/Information.txt").getFile()); 
     BufferedReader textReader = new BufferedReader(fr); 

     int i = 0; 
     String[] array = null; 

     // Read file in separate parts and remove commas 
     while ((sCurrentLine = textReader.readLine()) != null) { 
      array = sCurrentLine.split(","); 

      id[i] = array[0]; 
      name[i] = array[1]; 
      asg1[i] = array[2]; 
      asg2[i] = array[3]; 

      i++; 
     } 

     for(int j=0;j<i;j++){ 
      System.out.println(id[j] + " , " + name[j] + " , " + asg1[j] + " , " + asg2[j]); 
     } 
     textReader.close(); 
    } 

    // Catch exception if any 
    catch (Exception e) { 
     System.err.println("Error: " + e.getMessage()); 
    } 
} 

}

1

В случае, если требуется двойной массив, вы должен объявить массив как двойной в первую очередь следующим образом:

double [] asg1 = новый двойной [100];

, то вы можете использовать это:

asg1 [I] = Double.parseDouble (массив [2]);

+0

Это говорит: «Ошибка: для строки ввода:« Asg1 » Любая идея, что это значит? – user3184556

+0

Это означает, что parseDouble не читает двойное значение. Эта ошибка может возникнуть из-за самой первой строки.Вам нужно поставить if(), чтобы убедиться, что parseDouble работает во всех линиях, кроме первой строки – Ashutosh

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