нужно найти самую старую книгу из списка

125
10 ноября 2019, 05:30

вот мой код:

package com.company;

class Roman {
private Roman []roman = new Roman[20];
String author;
String name;
int data;
int size;
String genre;
Roman(){
}
Roman(String author,String name,int data, int size,String genre){
this.author= author;
this.name=name;
this.data=data;
this.size=size;
this.genre=genre;
}
void print(Roman rom){
System.out.println("Название : "+rom.name);
System.out.println("Автор : "+rom.author);
System.out.println("Год создания : "+rom.data+" г.");
System.out.println("Размер : "+rom.size+" Страниц");
System.out.println("Жанры : "+rom.genre);
System.out.println("\n");
}
/*void minyear(){
    int min = roman[0].data;
    for(int i=0;i<=roman.length;i++){
        if(roman[i].data<min)
            min=roman[i].data;
    }
    System.out.println("Самая старший роман : "+min);
}*/
}
public class Main {
public static void main(String[] args) {
    Roman []roman = new Roman[20];
    Roman t;
    roman[0] = new Roman("Иван Сергеевич Тургенев","Отцы и дети",1862,300,"Любовный роман, Философский роман, Политическая фантастика");
roman[1] = new Roman("Иван Сергеевич Тургенев","Муму",1854,35,"Художественное произведение");
roman[2] = new Roman("Иван Сергеевич Тургенев","Записки охотника",1852,50,"Художественное произведение");
roman[3] = new Roman("Лев Николаевич Толстой","Война и мир",1867,1274,"Роман, Любовный роман, Военная проза, Исторический жанр, Философский роман");
roman[4] = new Roman("Лев Николаевич Толстой","Анна Каренина",1877,776,"Роман, Реализм, Художественное произведение");
    for(int i=0;i<=roman.length;i++) {
        roman[i].print(roman[i]);
    }

    }
}

я не смог создать функцию которая получает значения введеных книг (например функция которая узнает наименьшее количество страниц и т.д я попытался (взял как комент)) помогите создать функцию при моей попытке выдает NPE

Answer 1
  import java.util.Objects;
public class Roman implements Comparable<Roman> {
    private final String author;
    private final String name;
    private final Integer data;
    private final Integer size;
    private final String genre;
    public Roman(String author, String name, int data, int size, String genre) {
        this.author = author;
        this.name = name;
        this.data = data;
        this.size = size;
        this.genre = genre;
    }
    public String getAuthor() {
        return author;
    }
    public String getName() {
        return name;
    }
    public int getData() {
        return data;
    }
    public int getSize() {
        return size;
    }
    public String getGenre() {
        return genre;
    }
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 53 * hash + Objects.hashCode(this.author);
        hash = 53 * hash + Objects.hashCode(this.name);
        hash = 53 * hash + Objects.hashCode(this.data);
        hash = 53 * hash + Objects.hashCode(this.size);
        hash = 53 * hash + Objects.hashCode(this.genre);
        return hash;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Roman other = (Roman) obj;
        if (!Objects.equals(this.author, other.author)) {
            return false;
        }
        if (!Objects.equals(this.name, other.name)) {
            return false;
        }
        if (!Objects.equals(this.genre, other.genre)) {
            return false;
        }
        if (!Objects.equals(this.data, other.data)) {
            return false;
        }
        if (!Objects.equals(this.size, other.size)) {
            return false;
        }
        return true;
    }
    @Override
    public String toString() {
        return "Roman{" + "author=" + author + ", name=" + name + ", data=" + data + ", size=" + size + ", genre=" + genre + '}';
    }
    @Override
    public int compareTo(Roman roman) {
        return this.data.compareTo(roman.getData());
    }
}  
public static void main(String[] args) {
        TreeSet<Roman>roman = new TreeSet<>();
        roman.add(new Roman("Иван Сергеевич Тургенев", "Отцы и дети", 1862, 300, "Любовный роман, Философский роман, Политическая фантастика"));
        roman.add(new Roman("Иван Сергеевич Тургенев", "Муму", 1854, 35, "Художественное произведение"));
        roman.add(new Roman("Иван Сергеевич Тургенев", "Записки охотника", 1852, 50, "Художественное произведение"));
        roman.add(new Roman("Лев Николаевич Толстой", "Война и мир", 1867, 1274, "Роман, Любовный роман, Военная проза, Исторический жанр, Философский роман"));
        roman.add(new Roman("Лев Николаевич Толстой", "Анна Каренина", 1877, 776, "Роман, Реализм, Художественное произведение"));
        //Collections.sort(roman);
        System.out.println(roman.first());
    }

Ваш класс Roman не может определить книгу с наименьшим годом(мы сейчас не говорим о статических методах), поскольку класс является своеобразным "чертежом" для создания объектов. Создавая объект через оператор new вы каждый раз создаете независимую сущность. Каждый из объектов класса Roman содержит информацию только об одной книге, которая хранится в полях объекта, т.е. каждый объект знает только свой год. Поэтому в пределах объекта никак нельзя узнать о годе в других книгах. Метод Main в классе Main создает коллекцию ,в которую добавляет множество объектов. Теперь наша коллекция хранит информацию о множестве книг, а значит в пределах коллекции можно произвести сравнение. В данном случае я просто сортирую книги по году. Это не единственный вариант, просто хочу показать, как это работает. Если есть вопросы - задавайте. И еще... В классе Roman у вас огромное количество стандартного кода (конструкторб геттеры, методы toString, equals, hashcode). Чтобы не писать это посмотрите в сторону lombok. Эта библиотека динамически генерирует эти методы, управление осуществляется с помощью аннотаций. Мало того, можно вместо не очень удачного конструктора легко использовать билдер. Там есть логирование и много других приятных "плюшек"

READ ALSO
Робота с HashMap &amp; HashSet

Робота с HashMap & HashSet

Изучаю коллекции, стараюсь подвести итоги по HashMap & HashSet если я в чём то не прав, пишите

137
Не изменяется текст в TextView

Не изменяется текст в TextView

Подскажите пожалуйста, в чем может быть проблема: не заменяется текст в TextView (проверял, ID ресурсов не пересекаются):

123
Проверить подписан на канал YouTube [закрыт]

Проверить подписан на канал YouTube [закрыт]

У меня есть приложение и в приложении есть игровые монеты, теперь, я хочу сделать, чтоб по кнопке предлагалось подписаться на канал в Yotube и за подписку...

134
Получить PID дочерних потоков в Java

Получить PID дочерних потоков в Java

Вступление: Есть консольное приложение (JRE16 !!!), в нем создается конфигурация для будующих дочерних потоков, в нем можно запускать дочерние...

157