Вернуть более одной переменной из метода Java - PullRequest
0 голосов
/ 03 ноября 2019
  • Ваша программа должна прочитать идентификационный номер и gpa и передать данные в два отдельных массива. Вы можете предположить, что в файле никогда не будет более 1000 студентов. Знаете ли вы, почему вы должны использовать два отдельных массива? В этой программе может оказаться полезным создать дополнительные массивы для выполнения требований программы, как описано ниже.
  • Для полной оценки вашей программе необходимо правильно выполнить две совершенно разные вещи: вы должны создать простую диаграмму, чтобы показатьсколько студентов попадают в каждую из 8 разных категорий. Диаграмма этого типа называется гистограммой, и обычно полезно показать, как данные распределяются по диапазону.
  • Для каждого учащегося во входном файле необходимо отобразить его S-число, gpa и классранг. S-номер и gpa уже будут в ваших массивах;тем не менее, вы должны вычислить их ранг класса.

Вот код, который у меня есть:

public static void main(String[] args) throws Exception
{
    Scanner gpadata;
    String snum;
    double gpa;
    int groupNumber;

    gpadata = new Scanner(new File("studentdata.txt"));

    while (gpadata.hasNext())
    {
        snum = gpadata.next();
        gpa = gpadata.nextDouble();
        groupNumber = gpaGroup(gpa);

        System.out.println("Student number, GPA, and group number"
                + " is: " + snum +
                "    " + gpa + "    " + groupNumber);  


    }
}


//Method to categorize students GPA into 1 of 8 groups
public static int gpaGroup(double gpa)
{

    //Declare all variables
    int gpaGroup;


    //Assign GPA a group number
    if (gpa >= 0.0 && gpa < 0.5)
        gpaGroup = 1;
    else if (gpa >= 0.5 && gpa < 1.0)
        gpaGroup = 2;
    else if (gpa >= 1.0 && gpa < 1.5)
        gpaGroup = 3;
    else if (gpa >= 1.5 && gpa < 2.0)
        gpaGroup = 3;
    else if (gpa >= 2.0 && gpa < 2.5)
        gpaGroup = 4;
    else if (gpa >= 2.5 && gpa < 3.0)
        gpaGroup = 5;
    else if (gpa >= 3.0 && gpa < 3.5)
        gpaGroup = 6;
    else
        gpaGroup = 7;

    //Return int value of group number
    return gpaGroup;
}

//Method to find number of students in each group
public static void studentsInGroup(int gpaGroup)
{
    //Declare all variables
    int gpaGroup1 = 0;
    int gpaGroup2 = 0;
    int gpaGroup3 = 0;
    int gpaGroup4 = 0;
    int gpaGroup5 = 0;
    int gpaGroup6 = 0;
    int gpaGroup7 = 0;
    int gpaGroup8 = 0;

    //Total students in each GPA group
    if (gpaGroup == 1)
        gpaGroup1++;
    else if (gpaGroup == 2)
        gpaGroup2++;
    else if (gpaGroup == 3)
        gpaGroup3++;
    else if (gpaGroup == 4)
        gpaGroup4++;
    else if (gpaGroup == 5)
        gpaGroup5++;
    else if (gpaGroup == 6)
        gpaGroup6++;
    else if (gpaGroup == 7)
        gpaGroup7++;
    else
        gpaGroup8++;

}

Могу ли я изменить свой метод, чтобы он возвращал более одной переменнойиз метода (в public static void studentsInGroup(int gpaGroup) возвращают значения числа студентов в каждой группе)? Это где массивы начинают входить? Отсюда я бы написал другой метод для округления числа учащихся в каждой категории до ближайшей десятки, а затем использовал его, чтобы написать метод для создания гистограммы и т. Д. И т. Д.

Я изо всех сил пытался понять концепции, но я боролся в последнее время. Это одно из моих последних заданий на семестр, и я хотел бы сохранить свой А, а также понять, что я делаю.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

убедитесь, что вы делаете следующее. Я не даю здесь никакого кода. Также не уверен, почему они хотят, чтобы вы использовали array только!?!

Разбейте ваши требования и посмотрите, чего вам нужно достичь.

  1. Начните с чтения каждой строки из файла
  2. каждая строка отделена "" и имеет id_number и gpa
  3. от требования, файл будетне содержит более 1000 студентов (1000 строк). Вы можете объявить это как статическую переменную уровня класса static String[] idnum_array = new String[1000]; и другой массив для gpa, который Double[]

  4. читает каждую строку и затем разделяется с помощью метода String.split(" "). Первая переменная - это ваш идентификационный номер, а вторая - ваш gpa. Вы следуете?

  5. поддерживает отдельный счетчик для увеличения позиции массива каждый раз, когда вы устанавливаете эти значения в двух массивах, созданных на шаге 3.

    Integer i = 0;
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        String[] splitString = line.split(" ");
        idnum_array[i] = String.valueOf(splitString[0]);
        gpa_array[i] = Double.valueOf(splitString[1]);
        i++;
    }
    

Согласны ли вы с тем, что если мы сделаем idnum_array[7] для возврата, то это соответствующий результат в gpa из gpa_array[7] для этого учащегося?

Как выбрать подсчет количества людей в определенной группе,вы. Я хотел бы сделать следующее

  1. создать статическую переменную уровня класса static Integer[] group_array = new Integer[]{0,0,0,0,0,0,0,0}; // there are only 8 groups!
  2. цикл мой gpa_array
  3. есть внутри цикла if / else для проверкив какую группу он попадает
  4. , увеличивая значение этого индекса на 1. group_array[index]++;

В конце у меня будет массив из 8 элементов, который будет соответствовать 8 группам,[0,200,300,200,0,300,0,0,0]

В итоге вы должны использовать почти 4 метода, похожих на этот. 1. readDataFromFile (String fileName) 2. groupGPAIntoCategory () 3. drawHistogram () 4. calcRank ()

Я бы лично создал Student объект с самого начала. Это просто чище и читабельнее. Убедитесь, что у вас есть блок try catch для печати ваших исключений и всегда комментируйте!

0 голосов
/ 04 ноября 2019

Могу ли я изменить свой метод так, чтобы он возвращал более одной переменной из метода (в public static void StudentsInGroup (int gpaGroup) возвращаются значения числа студентов в каждой группе)?

Да, вы можете. Вы можете создать объект, который содержит две переменные. Тем не менее, инструкции предлагают другое решение.

Внутри вашего цикла прочитайте id и gpa и немедленно вставьте их в два отдельных массива.

Вот фрагмент:

snums = [];
gpas = [];
while (gpadata.hasNext())
{
    snum = gpadata.next();
    gpa = gpadata.nextDouble();
    snums.append(snum);
    gpas.append(gpa);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...