java - 从 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,并了解我在做什么。
解决方案
确保您正在执行以下操作。我不会在这里泄露任何代码。也不知道为什么他们只希望你使用array
!?!
分解你的要求,看看你需要实现什么。
- 从文件中读取每一行开始
- 每行由“”分隔,并有 id_number 和 gpa
根据要求,该文件不会包含超过 1000 名学生(1000 行)。您可以将其声明为静态类级别变量
static String[] idnum_array = new String[1000];
和 gpa 的另一个数组,即Double[]
String.split(" ")
读取每一行,然后使用方法分隔。第一个变量是你的身份证号,第二个是你的 gpa。你跟着 ?每次在步骤 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 结果?
您如何选择计算某个组中的人数取决于您。我会做以下事情
- 创建一个静态类级别变量
static Integer[] group_array = new Integer[]{0,0,0,0,0,0,0,0}; // there are only 8 groups!
- 循环我的
gpa_array
- 在循环中有一个 if/else 来检查它属于哪个组
- 将该索引处的值增加 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
块来打印你的例外并总是评论!
推荐阅读
- vue.js - VuePress 不渲染`
` 标签 - html - 更改默认的 WordPress '文本缩进'
至
- libtool - libtool: Version mismatch error: 2.4.6 (expected) vs 2.4.6.42-b88ce (actual), aclocal 没有效果
- wordpress - wordpress 没有从 php 文件重定向
- javascript - 如何在javascript中使用定义的变量
- c# - 如何在 Unity 中选择随机游戏对象
- emacs - ht.elc 无法提供功能 ht
- c# - 登录操作成功时如何显示MainViewModel和隐藏LoginViewModel
- linux - 从 MacO 连接到 azure VM 的问题
- sql - MS Access 选择查询。显示匹配或不匹配