java - 数组存储 Java
问题描述
我希望我的学生数组将他们的姓名和年级关联起来。因此,当我在事后拜访他们时,我可以展示表现最好的两个学生。这是作业所以我不需要完成整个代码,但我需要一些帮助以确保正确存储输入。现在我的变量是x
and i
,x
是学生的数量,i
是计数器。同样,我的问题是将输入的学生的成绩与姓名相关联。我希望有足够的信息。
import java.util.Scanner;
public class Q3 {
public static void main(String[] args) {
int x = 0;
double average = 0;
int i = 0;
Scanner in = new Scanner(System.in);
System.out.println("Please eneter how many students you have: ");
x = in.nextInt();
int students = 0;
int sum = 0;
int grades[] = new int[x];
String[] names = new String[x];
for(i = 0; i <= x; i++) {
System.out.println("Please enter student name: ");
String name = in.nextLine();
names[i] = name;
System.out.println("Grade: ");
int grade = in.nextInt();
grades[i] = grade;
students++;
sum += grade;
x++;
}
if(students>0) {
average = (double) sum/students;
}
System.out.println("The average is " + average);
System.out.println("There are " + students + " students");
System.out.println("The top two students are: " + grades);
}
}
解决方案
您当前代码的问题是for
循环永远不会结束,因为您不断增加 的值x
,这也用于结束条件。
以下是一些建议:
只需在阅读时存储学生人数并删除x
变量:
int students = in.nextInt();
int grades[] = new int[students ];
String[] names = new String[students ];
然后读入这个数量的学生:
for(i = 0; i < students; i++) {
要找到前两名学生,您可以使用以下逻辑(假设 2 个或更多学生)
if grade[0] >= grade[1]
max1 = 0
max2 = 1
else
max1 = 1
max2 = 0
for i from 2 to students-1
if grade[i] >= grade[max1]
max2 = max1
max1 = i
else if grade[i] > grade[max2]
max2 = i
前两名学生然后在位置和max1
和数组中。max2
names
grades
推荐阅读
- sql - 如何从表中获取过去 24 小时的记录
- codenameone - CodenameOne IOS 构建失败...未知图像类型 0
- c++ - 在 Go 中使用 C++:错误:'reinterpret_cast' 未声明
- c++ - 条件变量虚假唤醒/循环任务
- javascript - 为什么我不能将此变量重新分配给 node.js 中的新值?
- c# - 如何使用 linq 从数组中删除某个字符串,而它作为第一个或最后一个元素存在
- html - 宽度:100% 未正确应用于子框
- kubernetes - 无法通过 Istio 中的虚拟服务访问服务
- python - 大熊猫中两个非标题行的字典
- c# - 如何从我的 WebAPI 服务的 JSON 输出中删除回车?