как распечатать определенные строки из массива из другого класса - PullRequest
0 голосов
/ 06 мая 2018

Так что я пытаюсь напечатать только романы, добавленные в массив, и я не могу понять, как .. Также мне нужно вернуть количество книг определенного вида. Я новичок в программировании, поэтому, пожалуйста, успокойся:)

Вот приложение, я должен добавить все книги из консоли Каждое слово, добавленное из консоли, запускает определенное действие, поэтому для печати книг, которые мне нужно написать, нужно добавить, мне нужно написать «добавить», тип книги, название книги, автора и т. Д.

import java.util.*;
public class App{
    public static void main(String [] args){
        Scanner s = new Scanner(System.in);
        Library bib = Library.getInstance();
        String line = "";
        line = s.nextLine();
        String[] v = line.split("\\s+");
        while(true){
        switch(v[0]){
            case "add": 
                String title = v[2];
                String autor = v[3];
                Book c = null;
                if("story".equals(v[1])){
                    c  = new Story(title, autor);
                } else if("novel".equals(v[1])){
                    int pages = Integer.parseInt(v[4]);
                    c = new Novel(title, autor, pages);
                } else if("poetry".equals(v[1])){
                    String publish = v[4];
                    c = new Poetry(title, autor, publish);
                }
                bib.adauga(c);
                break;
            case "print" : 
            case "return" : 
            case "exit" : System.exit(0); break;
            default : System.out.println("Command " + v[0] + " does not exist");
        }
    }
}
}

import java.util.*;
public class Library{
    private static Library instance;
    List<Book> books;

    private Library(){
        books = new ArrayList<>();
    }

    public static Library getInstance(){
        if(instance == null){
            instance = new Library();
        }
        return instance;
    }

    public void adauga(Book c){
        books.add(c);

    }

    public void afisare(){
        for(Book c : books){
            System.out.println(c);
        }
    }


}

public abstract class Book{
    String title;
    String autor;

    public Book(String title, String autor){
        this.title=title;
        this.autor=autor;
    }

     @Override
    public String toString(){
        return  title + " " + autor;
    }
}

public class Novel extends Book {
    int pages;

    public Novel(String title, String autor, int pages){
        super(title, autor);
        this.pages=pages;
    }

     @Override
    public String toString(){
        return super.toString() + " " + pages;
    }
}

Ответы [ 3 ]

0 голосов
/ 06 мая 2018

Вы можете использовать instanceof для проверки типа объекта.

//Go through every book
for(Book book : bib.books){
    if(book instanceof Novel){
         System.out.println(book);
    }
}
0 голосов
/ 06 мая 2018

Вы можете получить доступ к переменным из других объектов, используя '.' пока переменная находится в видимости (например, public или в том же пакете) или вы используете методы получения.

Так что в вашем случае вы можете сделать что-то вроде этого.

final List<Book> books = Library.getInstance().getBooks();
for(Book book : books) {
    if(book instanceof Novel) {
        System.out.println(((Novel)book).toString());
    }
}

нужно добавить в библиотеку

public List<Book> getBooks() {
    return this.books;
}

Это простой пример того, как вы можете использовать свои книги и страницы со своим примером, не стесняйтесь редактировать и использовать его по мере необходимости.

0 голосов
/ 06 мая 2018

Вы создали метод, который печатает все books из Library, вам нужно изменить его для печати хорошего типа книги:

Используйте print novel, например:

// in App
case "print" : bib.afisare(v[1]);
               break;

// in Library
public void afisare(String type){
    for(Book c : books){
        if("novel".equals(type) && c instance of Novel)
            System.out.println(c);
        else if("story".equals(type) && c instance of Story)
            System.out.println(c);
        else if("poetry".equals(type) && c instance of Poetry)
            System.out.println(c);
    }
}

Кроме того, из-за того, что while(true) вы собираетесь работать в бесконечном цикле, вам нужно снова спрашивать после переключателя или , прежде чем спрашивать и использовать do{}while();

do{
    line = s.nextLine();
    String[] v = line.split("\\s+");
    switch(v[0]){ 
        ... 
    }
}while(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...