Метод не меняет массив в основном - PullRequest
0 голосов
/ 02 октября 2018

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

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

Мой код указан ниже.Метод, который не работает: readFile()

package StudentsGrades;

import java.io.*;
import java.lang.*;

public class StudentsGrades {

    public static void main(String [] args ) {
    int numberOfLines = 0;
    String fileName = "";

    fileName = "marks_file.csv";
    //Obtain the number of lines in the given csv.
    numberOfLines = getNumberLines(fileName);
    System.out.println(numberOfLines);

    //initialise the arrays that the data will be stored in.
    double[] gradesArray = new double[numberOfLines];
    String[] studentsArray = new String[numberOfLines];

    if (numberOfLines > 0) {
        readFile(studentsArray, gradesArray, numberOfLines, fileName);
    }
    System.out.println(studentsArray[4]);
}
public static int getNumberLines (String importFile)  {
    int numLines = 0;
    try {
        FileReader fnol = new FileReader(importFile);
        LineNumberReader lnr = new LineNumberReader(fnol);

        while (lnr.readLine() != null ) {
            numLines++;
        }

    } catch (FileNotFoundException fe) {
        System.out.println("The file cannot be found");
    } catch (Exception e) {
        System.out.println("Invalid");
    }
    return numLines;
}
public static void readFile (String [] studentsArray, double[] gradesArray, int numLines, String fileName ) {
    try {
        String lineData = null;
        FileReader fr = new FileReader(fileName);
        BufferedReader br = new BufferedReader(fr);

        String currentLine = "";

        while ((currentLine = br.readLine()) != null ) {
            //Store the current Line in a string
            String[] lineDataArray = currentLine.split("\\s*,\\s*");
            //To index its position in the array
            int index = 0;
            //System.out.println(lineDataArray[1]);
            studentsArray[index] = lineDataArray[0];
            gradesArray[index] = Double.parseDouble(lineDataArray[1]);
            System.out.println("Student: " + studentsArray[index]
            + " Grade: " + gradesArray[index]);
            index++;
        }
    } catch (Exception e) {
        System.out.println("Unexpected value in file.");
    }

}
}

Результат

Студент: Кристофер Ли Оценка: 54,0 Студент: Стэнли Райт Оценка: 90,5 Студент: Оливер Стюарт Оценка:75,8 Студент: Джессика Чанг Оценка: 34,65 Студент: Адам Бвеон Оценка: 66,6 Студент: Крисси Йо Оценка: 88,9 пусто

Как видите, последнее значение равно null, и это когда я пытаюсьвывести значение из массива в пределах Main.

1 Ответ

0 голосов
/ 02 октября 2018

Поместите int index=0; вне цикла.

Если вы хотите заполнить массивы, вам нужно объявить index перед циклом.Поскольку теперь он находится внутри цикла, он каждый раз повторно объявляется и инициализируется равным 0. Таким образом, индекс всегда равен 0, когда вы его используете, и вы перезаписываете значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...