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
相关产品推荐
相关产品推荐

