Java - Перенос данных из txt файла в массивы - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время я пытаюсь работать над программой, которая использует идентификаторы учащихся и GPA (взятые из txt-файла) и использует их для выполнения множества других задач, таких как классификация учащихся по 1 из 8 категорий на основе диапазонов GPA, создание гистограммыстудентов в каждой группе, а также ранжировать студентов по GPA. Однако первое, что мне нужно сделать, это перенести идентификаторы учеников и GPA в два отдельных массива.

Я знаю, что синтаксис для создания массива следующий:

elementType[] arrayRefVar = new elementType[arraySize]

Однако ядо сих пор не знаю, как передать данные, считываемые из файла, в два отдельных массива. Код для чтения данных из txt-файла выглядит следующим образом:

public static void main(String[] args) throws Exception  // files requires exception handling
{
    String snum;     
    double gpa;
    Scanner gpadata = new Scanner(new File("studentdata.txt"));

    while (gpadata.hasNext()) // loop until you reach the end of the file 
    {
        snum = gpadata.next(); // reads the student's id number
        gpa = gpadata.nextDouble(); // read the student's gpa

        System.out.println(snum + "\t" + gpa); // display the line from the file in the Output window

    }
}

Итак, мой вопрос: как передать эту информацию в два отдельных массива? Я прошу прощения, если мой вопрос трудно понять, я чрезвычайно новичок в программировании. Я давно зашла в тупик в этой программе, и любая помощь будет чрезвычайно признательна! Спасибо.

1 Ответ

1 голос
/ 04 ноября 2019

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

public static void main(String[] args) throws FileNotFoundException {

    Scanner gpadata = new Scanner(new File("studentdata.txt"));
    List<String> IDs = new ArrayList<>();
    List<Double> GPAs = new ArrayList<>();
    while (gpadata.hasNext()) // loop until you reach the end of the file
    {
        String snum = gpadata.next(); // reads the student's id number
        double gpa = gpadata.nextDouble(); // read the student's gpa

        IDs.add(snum);
        GPAs.add(gpa);

        System.out.println(snum + "\t" + gpa); // display the line from the file in the Output window
    }
    // Use IDs and GPAs Lists for other calculations
}

Более лучший подход - использовать Map для «сопряжения» GPA с идентификатором студента.

Редактировать:

После того, как вы пояснили, что максимальное число записей не должно превышать 1000, я изменил свое решение, чтобы использовать массивы вместо списков. Я не изменил имена переменных, чтобы вы могли легко сравнить решения.

public static void main(String[] args) throws FileNotFoundException {

    Scanner gpadata = new Scanner(new File("studentdata.txt"));
    String[] IDs = new String[1000];
    double[] GPAs = new double[1000];
    int counter = 0;

    while (gpadata.hasNext()) // loop until you reach the end of the file
    {
        String snum = gpadata.next(); // reads the student's id number
        double gpa = gpadata.nextDouble(); // read the student's gpa

        IDs[counter] = snum;
        GPAs[counter] = gpa;

        System.out.println(snum + "\t" + gpa); // display the line from the file in the Output window
        counter++;
    }
    // Use IDs and GPAs Lists for other calculations
}

Обратите внимание, что нам нужна переменная counter (он же. Index) для адресации массивов.

...