Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействие между объектами и методами, Вопрос начального уровня 004 
:(
    Опции темы
PrinceOFF
Дата 5.12.2013, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.10.2013
Где: Минск, РБ

Репутация: нет
Всего: нет



Есть задача создать некий каталог книг (с набором необходимых полей) и отсортировать книги по заданному полю. Причем, необходимо использовать, геттеры, сеттеры и выделить массив книг в отдельный класс.
Программу вроде написал, но последнее условие никак не дается. Уперся, ну прямо как баран в новые ворота (хотя они для меня действительно новые smile ). Я бы может вопрос и не задавал, но уже 2 недели прошло с момента начала решения, а у меня ступор - и задачу решить не могу и дальше учить новые главы не начинаю... 
Что посоветуете, уважаемые? "Забить" и остановиться на данном этапе на существующем решении с мыслями, что "все придет позже" или продолжать решать (потенциально можно и год еще решать...) и не изучать новую теорию пока не решу задачу по старой.
К слову, соответствующие главы книг и у Васильева, и у Шилдта и Хорстмана перечитал опять (а некоторые и по несколько раз). Читаю - все понятно, как только доходит до этой задачи - ступор! Ну что еще сказать - ступор, он и есть ступор...

Первый листинг:
Код

public class Book {

    private int id;
    private String author;
    private String book_name;
    private int year;
    private int pages;
    private double price;

    public void setId(int id) {
        this.id = id;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
    
    public String getAuthor() {
        return author;
    }

    public void setBook_name(String book_name) {
        this.book_name = book_name;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String toString() {
        return "Книга [id: " + id + ", Автор: " + author + ", Название: " + book_name + ", Год издания: " + year + ", Страниц: " + pages
                + ", Цена, руб: " + price + "]";
    }
}


Второй листинг:
Код

public class Main {
    
    public static void main(String[] args) {
        Book book_01 = new Book();
        Book book_02 = new Book();
        Book book_03 = new Book();
        Book book_04 = new Book();

        book_01.setId(01);
        book_01.setAuthor("Schildt");
        book_01.setBook_name("Java. The complete reference");
        book_01.setYear(2013);
        book_01.setPages(1104);
        book_01.setPrice(290000.0);

        book_02.setId(02);
        book_02.setAuthor("Horstman");
        book_02.setBook_name("Java");
        book_02.setYear(2009);
        book_02.setPages(1050);
        book_02.setPrice(350000.0);

        book_03.setId(03);
        book_03.setAuthor("Eckel");
        book_03.setBook_name("Thinking in Java");
        book_03.setYear(2009);
        book_03.setPages(640);
        book_03.setPrice(150000.0);

        book_04.setId(04);
        book_04.setAuthor("Vasiljev");
        book_04.setBook_name("Learning Java");
        book_04.setYear(2010);
        book_04.setPages(351);
        book_04.setPrice(75000.0);

        Book[] list = new Book[4];

        list[0] = book_01;
        list[1] = book_02;
        list[2] = book_03;
        list[3] = book_04;

        for (int i = 0; i < list.length; i++) {
            System.out.println(list[i].toString());
        }

        // Сортировка по авторам
        for (int j = 0; j < list.length; j++) {
            for (int i = j + 1; i < list.length; i++) {
                if (list[i].getAuthor().compareTo(list[j].getAuthor()) < 0) {
                    String t = list[j].getAuthor();
                    list[j].setAuthor(list[i].getAuthor());
                    list[i].setAuthor(t);
                }
            }
            System.out.println("Сортировка по авторам: " + list[j].getAuthor());
        }

    }
    
}

PM   Вверх
Pawl
Дата 5.12.2013, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



А в чем проблема-то? Вы почти все правильно сделали, 
массив выделили в отдельный класс - Main, только с его заполнением запутались, и сортировку  можно было выполнить стандпртными средствами:
Код

import static java.util.Arrays.*;
...
    public static void main(String ...args) {
        Book [] books = new Book[4];
        for (int i = 0; i < books.length; i++) {
            books[i] = new Book();
        }
        books[0].setId(01);
        books[0].setAuthor("Schildt");
        books[0].setBook_name("Java. The complete reference");
        books[0].setYear(2013);
        books[0].setPages(1104);
        books[0].setPrice(290000.0);
        books[1].setId(02);
        books[1].setAuthor("Horstman");
        books[1].setBook_name("Java");
        books[1].setYear(2009);
        books[1].setPages(1050);
        books[1].setPrice(350000.0);
        books[2].setId(03);
        books[2].setAuthor("Eckel");
        books[2].setBook_name("Thinking in Java");
        books[2].setYear(2009);
        books[2].setPages(640);
        books[2].setPrice(150000.0);
        books[3].setId(04);
        books[3].setAuthor("Vasiljev");
        books[3].setBook_name("Learning Java");
        books[3].setYear(2010);
        books[3].setPages(351);
        books[3].setPrice(75000.0);
        sort(books, (Book b1, Book b2) -> b1.author.compareTo(b2.author));
        stream(books).forEach(System.out::println);
    }

я тут пользовался java 8 with lambda, она скоро выйдет официально, так что разбирайтесь! smile 

UPD
Можно даже сортировку и печать сделать в одну строку:
Код

import static java.util.Arrays.stream;
...
stream(books).sorted((Book b1, Book b2) -> b1.author.compareTo(b2.author)).forEach(System.out::println);


Это сообщение отредактировал(а) Pawl - 5.12.2013, 17:37


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
PrinceOFF
Дата 5.12.2013, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.10.2013
Где: Минск, РБ

Репутация: нет
Всего: нет



Цитата(Pawl @ 5.12.2013,  17:25)
А в чем проблема-то? Вы почти все правильно сделали, 
массив выделили в отдельный класс - Main, только с его заполнением запутались...

О как, красиво  smile :
Цитата

Book [] books = new Book[4];
        for (int i = 0; i < books.length; i++) {
            books[i] = new Book();


Только у меня из класса Main стояла задача вынести массив в третий класс, например класс Array. Вот с этим у меня проблемы уже вторую неделю...
PM   Вверх
Pawl
Дата 5.12.2013, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Код

public class Massive {
    private Book books[];

    public Massive() {
        books = new Book[4];
        for (int i = 0; i < books.length; i++) {
            books[i] = new Book();
        }
        books[0].setId(01);
        books[0].setAuthor("Schildt");
        books[0].setBook_name("Java. The complete reference");
        books[0].setYear(2013);
        books[0].setPages(1104);
        books[0].setPrice(290000.0);
        books[1].setId(02);
        books[1].setAuthor("Horstman");
        books[1].setBook_name("Java");
        books[1].setYear(2009);
        books[1].setPages(1050);
        books[1].setPrice(350000.0);
        books[2].setId(03);
        books[2].setAuthor("Eckel");
        books[2].setBook_name("Thinking in Java");
        books[2].setYear(2009);
        books[2].setPages(640);
        books[2].setPrice(150000.0);
        books[3].setId(04);
        books[3].setAuthor("Vasiljev");
        books[3].setBook_name("Learning Java");
        books[3].setYear(2010);
        books[3].setPages(351);
        books[3].setPrice(75000.0);
    }

    public Book[] getBook() {
        return books;
    }
}

Код

import static java.util.Arrays.stream;

public class Main {
    public static void main(String ...args) {
        stream(new Massive().getBook()).sorted((Book b1, Book b2) ->
                b1.getAuthor().compareTo(b2.getAuthor()))
                .forEach(System.out::println);
    }
}



--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
PrinceOFF
Дата 6.12.2013, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.10.2013
Где: Минск, РБ

Репутация: нет
Всего: нет



В целом (без разбора новых коллекций и функций) понятно.
А у меня загвоздка оказывается была в том, что мне сказали, что объекты массива я должен создать в классе Main, а сам массив, собственно в классе massive. Поля объктов опять же должен заполнить сетерами в классе Main, а перебор массива, опять же в классе Massive... Вот такая вот чехарда получилась, и я все никак не мог понять а почему же я должен разделять на разные классы сам массив и элементы массива - мне казалось это нелогичным... 
Спасибо.
PM   Вверх
Pawl
Дата 6.12.2013, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Цитата(PrinceOFF @  6.12.2013,  10:01 Найти цитируемый пост)
А у меня загвоздка оказывается была в том, что мне сказали, что объекты массива я должен создать в классе Main, а сам массив, собственно в классе massive.

Если не секрет, кто это вам дает такие ТЗ?


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
PrinceOFF
Дата 6.12.2013, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.10.2013
Где: Минск, РБ

Репутация: нет
Всего: нет



Цитата

Если не секрет, кто это вам дает такие ТЗ?

Не, не секрет. Это мой коллега по работе, который точно так же как и я изучает java в рабочее и в свободное от работы время...  smile Это он меня "подсадил"...  smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.