You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java程序打印哈希码而非学生信息问题求助

问题解决步骤

1. 修复toString()方法失效问题

你遇到的哈希码输出问题,是因为没有在Student类内部正确重写toString()方法。必须在Student类中添加带@Override注解的toString方法,确保覆盖Object类的默认实现:

在Student类中插入以下代码:

@Override
public String toString() {
    return "Student{" +
            "FirstName='" + fName + '\'' +
            ", LastName='" + lName + '\'' +
            ", ID=" + id +
            ", Score=" + score +
            '}';
}

2. 修改Comparator实现分数降序排序

当前代码是按分数升序排序,要实现降序,只需调换比较对象的顺序:

class ByScoreComparator implements Comparator<Student> {
    @Override
    public int compare(Student s1, Student s2) {
        // 用s2的分数和s1比较,实现降序
        return Integer.compare(s2.getScore(), s1.getScore());
    }
}

3. 修复输入验证的死循环bug

当前姓名验证逻辑存在死循环:输入非字母内容时,仅提示错误但未重新读取新输入,导致无限循环。需要在while循环内补充读取输入的代码:

修正后的FirstName验证:

System.out.println("Enter first name ");
String fName = input.next();
while (!alphabetic(fName)) {
    System.out.println("Wrong! Please enter again ");
    fName = input.next(); // 新增:重新读取输入
}

修正后的LastName验证:

System.out.println("Enter last name ");
String lName = input.next();
while (!alphabetic(lName)) {
    System.out.println("Wrong! Please enter again ");
    lName = input.next(); // 新增:重新读取输入
}

完整修正代码

import java.util.Arrays;
import java.util.Scanner;
import java.util.Comparator;

public class Main {
    private static class Student {
        String fName; // First Name
        String lName; // Last Name
        int id; // Student ID
        int score; // Score

        public Student(String fName, String lName, int id, int score) {
            this.fName = fName;
            this.lName = lName;
            this.id = id;
            this.score = score;
        }

        public int getScore() {
            return score;
        }

        // 正确重写toString方法
        @Override
        public String toString() {
            return "Student{" +
                    "FirstName='" + fName + '\'' +
                    ", LastName='" + lName + '\'' +
                    ", ID=" + id +
                    ", Score=" + score +
                    '}';
        }
    }

    // Checking if Alphabetic or not
    public static boolean alphabetic(String str) {
        char[] charArray = str.toCharArray();
        for (char c : charArray) {
            if (!Character.isLetter(c))
                return false;
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println("Enter the number of students");
        Scanner input = new Scanner(System.in);
        int k = input.nextInt(); // number of students
        Student[] students = new Student[k];

        for (int i = 0; i < k; ) {
            System.out.println("Enter id");
            int id = input.nextInt();

            System.out.println("Enter first name ");
            String fName = input.next();
            while (!alphabetic(fName)) {
                System.out.println("Wrong! Please enter again ");
                fName = input.next(); // 修复死循环:重新读取输入
            }

            System.out.println("Enter last name ");
            String lName = input.next();
            while (!alphabetic(lName)) {
                System.out.println("Wrong! Please enter again ");
                lName = input.next(); // 修复死循环:重新读取输入
            }

            System.out.println("Enter score ");
            int score = input.nextInt();

            students[i++] = new Student(fName, lName, id, score);
        }

        // 降序排序的Comparator
        class ByScoreComparator implements Comparator<Student> {
            @Override
            public int compare(Student s1, Student s2) {
                return Integer.compare(s2.getScore(), s1.getScore());
            }
        }

        Arrays.sort(students, new ByScoreComparator());
        System.out.println("Sorted Students (Descending by Score):");
        System.out.println(Arrays.toString(students));
        
        input.close(); // 关闭Scanner释放资源
    }
}

内容的提问来源于stack exchange,提问作者yasakrami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:20:45