首页 > 解决方案 > 数组存储 Java

问题描述

我希望我的学生数组将他们的姓名和年级关联起来。因此,当我在事后拜访他们时,我可以展示表现最好的两个学生。这是作业所以我不需要完成整个代码,但我需要一些帮助以确保正确存储输入。现在我的变量是xand ix是学生的数量,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);
    }
}

标签: javaarrays

解决方案


您当前代码的问题是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和数组中。max2namesgrades


推荐阅读