所以我试图只打印添加到阵列的小说,我无法弄清楚如何... 另外,我需要返回特定类型的书籍数量。 我是编程新手,所以请带我轻松:)
这是应用程序,我必须从控制台添加所有书籍 从控制台添加的每个单词触发一个特定的动作,以便打印我需要写的书籍,添加我需要写的添加,书籍类型,书名,作者等。
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;
}
}
答案 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;
}
这只是一个简单的示例,您可以将自己的书籍和页面与示例结合使用,随时根据需要进行编辑和使用。