fix: make constants private, return hashCode check in equals

This commit is contained in:
Дюрягин Данил
2026-08-28 17:50:35 +03:00
parent daa6583470
commit e53e1798e5
@@ -3,11 +3,10 @@ package ru.project.student;
import java.util.Objects; import java.util.Objects;
public class Student { public class Student {
private static final double MIN_AVERAGE_GRADE = 0.0;
public static final double MIN_AVERAGE_GRADE = 0.0; private static final double MAX_AVERAGE_GRADE = 5.0;
public static final double MAX_AVERAGE_GRADE = 5.0; private static final int MIN_RECORD_BOOK_NUMBER = 1;
public static final int MIN_RECORD_BOOK_NUMBER = 1; private static final String GROUP_NUMBER_PATTERN = "^[A-Z][0-9]{2}$";
public static final String GROUP_NUMBER_PATTERN = "^[A-Z][0-9]{2}$";
private final String groupNumber; private final String groupNumber;
private final double averageGrade; private final double averageGrade;
@@ -16,15 +15,18 @@ public class Student {
public Student(String groupNumber, double averageGrade, int recordBookNumber) { public Student(String groupNumber, double averageGrade, int recordBookNumber) {
if (groupNumber == null || !groupNumber.matches(GROUP_NUMBER_PATTERN)) { if (groupNumber == null || !groupNumber.matches(GROUP_NUMBER_PATTERN)) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Group number must match pattern: " + GROUP_NUMBER_PATTERN); "Group number must match pattern: " + GROUP_NUMBER_PATTERN
);
} }
if (averageGrade < MIN_AVERAGE_GRADE || averageGrade > MAX_AVERAGE_GRADE) { if (averageGrade < MIN_AVERAGE_GRADE || averageGrade > MAX_AVERAGE_GRADE) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Average grade must be between " + MIN_AVERAGE_GRADE + " and " + MAX_AVERAGE_GRADE); "Average grade must be between " + MIN_AVERAGE_GRADE + " and " + MAX_AVERAGE_GRADE
);
} }
if (recordBookNumber < MIN_RECORD_BOOK_NUMBER) { if (recordBookNumber < MIN_RECORD_BOOK_NUMBER) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Record book number must be at least " + MIN_RECORD_BOOK_NUMBER); "Record book number must be at least " + MIN_RECORD_BOOK_NUMBER
);
} }
this.groupNumber = groupNumber; this.groupNumber = groupNumber;
this.averageGrade = averageGrade; this.averageGrade = averageGrade;
@@ -43,16 +45,8 @@ public class Student {
return recordBookNumber; return recordBookNumber;
} }
public Student withGroupNumber(String groupNumber) { public static double getMinAverageGrade() {
return new Student(groupNumber, this.averageGrade, this.recordBookNumber); return MIN_AVERAGE_GRADE;
}
public Student withAverageGrade(double averageGrade) {
return new Student(this.groupNumber, averageGrade, this.recordBookNumber);
}
public Student withRecordBookNumber(int recordBookNumber) {
return new Student(this.groupNumber, this.averageGrade, recordBookNumber);
} }
public static double getMaxAverageGrade() { public static double getMaxAverageGrade() {
@@ -67,6 +61,19 @@ public class Student {
return GROUP_NUMBER_PATTERN; return GROUP_NUMBER_PATTERN;
} }
public Student withGroupNumber(String groupNumber) {
return new Student(groupNumber, this.averageGrade, this.recordBookNumber);
}
public Student withAverageGrade(double averageGrade) {
return new Student(this.groupNumber, averageGrade, this.recordBookNumber);
}
public Student withRecordBookNumber(int recordBookNumber) {
return new Student(this.groupNumber, this.averageGrade, recordBookNumber);
}
@Override
public String toString() { public String toString() {
return "Student{" + return "Student{" +
"groupNumber='" + groupNumber + '\'' + "groupNumber='" + groupNumber + '\'' +
@@ -83,6 +90,9 @@ public class Student {
if (obj == null || getClass() != obj.getClass()) { if (obj == null || getClass() != obj.getClass()) {
return false; return false;
} }
if (this.hashCode() != obj.hashCode()) {
return false;
}
Student student = (Student) obj; Student student = (Student) obj;
return Double.compare(averageGrade, student.averageGrade) == 0 return Double.compare(averageGrade, student.averageGrade) == 0
&& recordBookNumber == student.recordBookNumber && recordBookNumber == student.recordBookNumber