【问题标题】:Sorting student test scores in an array对数组中的学生考试成绩进行排序
【发布时间】:2017-01-15 06:50:45
【问题描述】:

给我一​​个整数 N,它是要输入的测试分数的数量。对于每一行,N,在他们的考试成绩后面会有一个学生姓名。我需要计算他们的考试成绩总和并打印出第二小的学生姓名。

【问题讨论】:

  • 我在你的输入中看到 H 的测试分数是 4。
  • 有些学生分数重复,B 得 6 分,E 得 3 分(不是 7 分)。 H也有4个
  • 您必须添加它们。这是他们分数的总和(看看 H 是如何得到 4 的,然后它说 H 有 5)。 4 + 5 = 9。
  • 我看到输出应该是 Z,即 4
  • 不添加许多if检查,而是直接将学生姓名作为键,将他们的分数之和作为值放入Map中。然后只需按值对地图进行排序,然后取第二个学生姓名来显示输出

标签: java algorithm


【解决方案1】:

所以,我要做的是为学生创建一个班级数组。该类将具有名称和分数的两个实例变量。然后,当所有输入完成后,您需要做的就是获取它们。这是我为那个确切的东西想出的代码。

import java.util.*;

public class testScores {

    public static void main(String[] args){


        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        Student[] students = new Student[n];
        for(int i = 0; i < n; i++){
            students[i] = new Student();
            System.out.print("Enter the student's name");
            students[i].setName(scan.next());
            scan.nextLine();
            System.out.print("Enter the student's score");
            students[i].setScore(scan.nextInt());
            scan.nextLine();
        }

        int total = 0;
        int smallest_name = 0;
        for(int i = 0; i < n; i++){
            total+=students[i].getScore();
            if(students[i].getName().length() < students[smallest_name].getName().length())
                smallest_name = i;
        }

        int second_smallest = 0;
        for(int i = 0; i < n; i++){
            if(students[i].getName().length() > students[smallest_name].getName().length() && students[i].getName().length() < students[second_smallest].getName().length())
                second_smallest = i;
        }

        System.out.println("The sum of the scores is: " + total);
        System.out.println("The second smallest name is: " + students[second_smallest].getName());

    }
}

class Student{

    private String name;
    private int score;

    public Student(){}

    public void setScore(int n){
        score = n;
    }

    public void setName(String n){
        name = n;
    }

    public int getScore(){
        return score;
    }

    public String getName(){
        return name;
    }

}

【讨论】:

  • 是的,我正在努力解决这些问题,我会在一秒钟内重新发布。
  • 现在输出第二小的名字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多