【问题标题】:Java Array GradingJava 数组分级
【发布时间】:2016-11-07 19:26:52
【问题描述】:

我正在寻找一些关于我的代码的输入。我想要做的是以测试分数或其他形式获取用户输入。用户可以输入他们需要输入多少个等级,并将它们存储在数组中。然后程序将在一条曲线上评分,最高为 A。如果分数在最高分的 10 分之内,它也是 A,如果它比更高的分数低 10 到 20 分,它是 B,如果它比最高分低 20 到 30 分,那么它是 C,以此类推直到 F。

我的问题是我不知道如何将某个元素与最高的元素进行比较以查看它的等级。所以我的问题是如何将数组中的某个元素与数组中的最高元素进行比较?

import java.util.Scanner;

public class StudentGrades {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int students;


        System.out.println("How many students do you have?");
        students = keyboard.nextInt();
        while (students < 0) {
            System.out.println("Invalid student amount");
            students = keyboard.nextInt();
        }
        int[] kids = new int[students];

        double[] scores = new double[students];

        for (int index = 0; index < students; index++) {

            System.out.println("Enter score for student #" + (index + 1) + ": ");
            scores[index] = keyboard.nextDouble();

        }
        double high = scores[0];
        for (int index = 1; index < scores.length; index++) {
            if (scores[index] > high) ;
            high = scores[index];

        }

        if (//place in array >= (highest-10)
                System.out.println("Student (whatever there position is) has an A")
    }

}

因此,如果有人能给我一些关于这个问题的见解,我将不胜感激,如果您发现代码有任何问题,请告诉我。任何帮助都会很棒。只是为了澄清我的问题是试图找到字母等级。查看底部的 if 语句。

【问题讨论】:

  • 你不知道如何计算最高索引?您不知道如何在特定索引处获取值?你不知道如何比较两个值?你到底在坚持什么?
  • @shmosel 我一直在比较输入到数组中的一个等级,以免将分数元素 0 中的值与最高分进行比较来计算字母等级。我不知道这样做的语法。
  • 你重复自己并没有帮助。我不是问你需要什么,我问的是你坚持什么。我们不是编码服务,但我们很乐意帮助您解决特定问题。所以解释问题,而不是(只是)要求。
  • @shmosel 问题是我不能/不知道如何选择数组的某个部分与最高值进行比较。那是我的问题。

标签: java arrays


【解决方案1】:

如果我是你,我会这样做:

public class Student implements Comparable{

    int index;
    private double grade;

    public Student(int i, double d) {
        grade = d;
        index = i;
    }

    public int getIndex() {
        return index;
    }

    public double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }

    @Override
    public int compareTo(Object o) {
        Student s = (Student)o;

        if (s.getGrade() < grade){
            return -1;
        } else if (s.getGrade() == grade) {
            return 0;
        }
        return 1;
    }
}

应用的驱动是:

   public static void main(String[] args) throws Exception {

        Scanner keyboard = new Scanner(System.in);
        int amount;

        System.out.println("How many students do you have?");
        amount = keyboard.nextInt();
        while (amount < 0) {
            System.out.println("Invalid student amount");
            amount = keyboard.nextInt();
        }

        Student[] students = new Student[amount];
        for (int index = 0; index < amount; index++) {
            System.out.println("Enter score for student #" + (index + 1) + ": ");
            students[index] = new Student(index, keyboard.nextDouble());
        }

        Arrays.sort(students);

        for (int i = 0; i < amount / 10 + 1; i++) {
            System.out.println("Student " + (students[i].getIndex() + 1) + " has an A");
        }
    }

编辑:
对 cme​​ts 中要求的 OP 的额外说明:

double highest = students[0].getGrade();
for (Student s : students) {
    if (s.getGrade() > highest) {
        highest = s.getGrade();
    }
}

【讨论】:

  • 我有一个简短的问题要问你,因为你似乎知道你的东西,有没有办法让 for 语句遍历每个元素并将其与最高分进行比较?
  • @JohnSmth 我编辑了我的答案。现在要睡觉。如果您有更多问题,请等到明天才能得到答案。
  • Student 类不应为 Comparable。更好的方法是写Arrays.sort(students, Comparator.comparing(Student::getGrade).reversed());。或者,compareTo 方法应该使用Integer.compare(s.grade, grade) 来避免使用大的if 语句。
猜你喜欢
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多