首页 > 解决方案 > 从 Java 方法返回多个变量

问题描述

  • 您的程序必须读取 id 号和 gpa 并将数据传输到两个单独的数组中。您可以假设文件中的学生人数永远不会超过 1000 人。你知道为什么你必须使用两个独立的数组吗?您可能会发现在此程序中创建额外的数组来完成程序的要求很有用,如下所述。
  • 你的程序必须正确地做两件完全不同的事情以获得完整的学分:你必须创建一个简单的图表来显示有多少学生属于 8 个不同类别中的每一个。这种类型的图表称为直方图,通常用于显示数据如何在一个范围内分布。
  • 对于输入文件中的每个学生,您必须显示他们的 S 编号、gpa 和班级排名。S-number 和 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)返回每组学生人数的值)吗?这是数组开始出现的地方吗?从这里我会写另一种方法来将每个类别中的学生人数四舍五入到最接近的十位,然后用它来编写一个创建直方图等的方法。

我一直在努力理解这些概念,但最近我一直在努力。这是我本学期最后的作业之一,我想保持我的 A,并了解我在做什么。

标签: javaarraysmethods

解决方案


确保您正在执行以下操作。我不会在这里泄露任何代码。也不知道为什么他们只希望你使用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_array[7]该学生的相应 gpa 结果?

您如何选择计算某个组中的人数取决于您。我会做以下事情

  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. calculateRank()

我会Student从一开始就亲自创建一个对象。它只是更清洁和可读。确保你有你的try catch块来打印你的例外并总是评论!


推荐阅读