如何从另一个类的数组中打印特定行

时间:2018-05-06 19:54:19

标签: java arrays string polymorphism singleton

所以我试图只打印添加到阵列的小说,我无法弄清楚如何... 另外,我需要返回特定类型的书籍数量。 我是编程新手,所以请带我轻松:)

这是应用程序,我必须从控制台添加所有书籍 从控制台添加的每个单词触发一个特定的动作,以便打印我需要写的书籍,添加我需要写的添加,书籍类型,书名,作者等。

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 :(得分:1)

您可以使用instanceof来检查对象的类型。

//Go through every book
for(Book book : bib.books){
    if(book instanceof Novel){
         System.out.println(book);
    }
}

答案 1 :(得分:0)

您创建的方法可以打印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)将以无限循环运行,因此您需要在切换之前再次询问并使用{{1 }}

do{}while();

答案 2 :(得分:0)

您可以使用&#39;来访问其他对象中的变量。&#39;只要变量具有可见性(例如公共或相同的包)或使用getter方法。

所以在你的情况下你可以做这样的事情。

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;
}

这只是一个简单的示例,您可以将自己的书籍和页面与示例结合使用,随时根据需要进行编辑和使用。