Хочу реализовать интерфейс Comparable, и с помощью него произвести сравнение (и последующую сортировку) элементов массива по полю типа LocalDate. Приведенный ниже код дает ошибку dateOfAdmission cannot be resolved or is not a field. Мне посоветовали читать справку с оракла https://docs.oracle.com/javase/8/docs/api/java/time/chrono/ChronoLocalDate.html, но из-за того что мой английский пока что состоит из бед и огорчений, понял я немного. Прошу объяснить мне в чем ошибка и как нужно сделать, что бы я смог сравнивать объекты по полю типа LocalDate. Заранее благодарен. p.s.: клонирование не дописано
package myDefault;
import java.time.*;
import java.util.*;
/*В данной программе ставлю целью повторить пройденный материал по сравнению и клонированию объектов*/
public class Student implements Comparable<LocalDate>, Cloneable
{
private String firstName;
private String lastName;
LocalDate dateOfAdmission;
int scholarship;
Student(String firstName, String lastName, int day, int month, int year, int scholarship)
{
this.firstName = firstName;
this.lastName = lastName;
dateOfAdmission = LocalDate.of(day,month,year);
this.scholarship = scholarship;
}
public int compareTo(LocalDate other)
{
return Double.compare(dateOfAdmission, other.dateOfAdmission);
}
public void fillArray()
{
Student[] arrayOfStudents = new Student[3];
Student petya = new Student("Petya","Popov",10,6,2017,1500);
Student vasya = new Student("Vasya","Ovsyannikov",5,6,2017,1500);
Student gena = new Student("Gena","Lolov",12,6,2017,1500);
arrayOfStudents[0] = petya;
arrayOfStudents[1] = vasya;
arrayOfStudents[2] = gena;
}
public void createNewArray()
{
Student[] newArray = new Student[3];
}
public void outputArray(Student[] arrayOfStudents)
{
int counter;
for(counter = 0; counter < 3; counter++)
{
System.out.println(arrayOfStudents[counter]);
}
}
public Student clone() throws CloneNotSupportedException
{
Student cloned = (Student) super.clone();
return cloned;
}
}
Вы сами должны реализовать сравнение двух полей а не позаимствовать чужой. Можно конечно и чужой позаимствовать если он вам подходит. Мне кажется что дабл вам никак не подходит. Попробуйте как то так:
int compareTo (LocalDate otherDate) {
int cmp = (year - otherDate.year);
if (cmp == 0) {
cmp = (month - otherDate.month);
if (cmp == 0) {
cmp = (day - otherDate.day);
}
}
return cmp;
}
Но это компаратор для LocalDate
а вам нужен для студента по этому
int compareTo (Student otherStudent) {
LocalDate otherDate = otherStudent.dateOfAdmission;
int cmp = (year - otherDate.year);
if (cmp == 0) {
cmp = (month - otherDate.month);
if (cmp == 0) {
cmp = (day - otherDate.day);
}
}
return cmp;
}
Это будет компаратор студентов, НО сравнивать он будет только по дате!
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я думаю, что излишне будет писать код активитиКласс был успешно испытан на консоли Java
Как реализовать последовательный обход дерева на Java? (TreeSet)
Вычитал что на андроид можно проверять интернет соединение с помощью
Приветствую! Столкнулся с проблемой, что нужно отобразить Google карту в моем Swing приложенииЕдинственные задачи - устанавливать маркеры (правда...