【问题标题】:ArrayList of string and another arraylist字符串的ArrayList和另一个arraylist
【发布时间】:2021-03-04 19:28:57
【问题描述】:

所以我正在制作一个管理书店的程序,下面是一个应该如何处理以下主要内容的示例:

        bookStore bookStore = new bookStore("Lelo");
        book l1 = new TecnicalBook("H. Schildt", "\"Java: The Complete Reference\"", 80, "Computer Science- Java");
        bookStore.addBook(l1);
        book l2= new AdventureBook("A. Christie", "\"The Man in the Brown Suit\"", 75, 14);
        bookStore.addBook(l2);
                
        
        Client c1 = new Premium("B. Antunes", "antunes@books.com");
        bookStore.addClient(c1);
        Client c2 = new Frequent("A. Oliveira", "oliveira@books.com");
        bookStore.addClient(c2);
        System.out.println("Initial stock:");
        bookStore.showBooks();
        bookStore.sale(l1, c1);
        System.out.println("Stock after selling:");
        bookStore.showBooks();
        System.out.println("Sales Volume:"+bookStore.SalesVolume);        
        bookStore.showClientsBooks(c1);

应该显示这个结果:

Initial stock:
Author:H. Schildt   Title:"Java: The Complete Reference"   Base Price:80.0
Author:A. Christie   Title:"The Man in the Brown Suit"   Base Price:75.0
B. Antunes bought "Java: The Complete Reference", Tecnical Book of Computer Science- Java, for 72.0
Stock after selling:
Author:A. Christie   Title:"The Man in the Brown Suit"   Base Price:75.0
Sales Volume:72.0
B. Antunes bought: "UML Distilled". "The Man in the Brown Suit".

我唯一不能做的部分是最后一行,显示每个客户购买的产品,我正在考虑创建一个包含客户名称字符串和书籍类的数组列表的类,然后让每个客户的该类的数组列表,但我不确定如何制作这个,可能有更好的方法, 谢谢

编辑:我有这些课程: 课本 类技术书扩展书 类冒险书扩展书

类客户端 类常规扩展客户端 类频繁扩展客户端 高级课程扩展客户

我有一个书店类,其中我有一个书籍和客户对象的数组列表。

【问题讨论】:

  • 我认为你建议的解决方案很好!
  • @Laugslander 所以可以说我创建了一个 clientBooks 类的数组列表,其中包含客户名称的字符串和书籍对象的数组列表,然后我如何添加客户购买的书籍以及如何我打印所有的?

标签: java oop arraylist polymorphism hierarchy


【解决方案1】:

您可以将书籍列表添加到您的客户类中以跟踪销售情况:

class Client {

    ...

    private List<Book> books;

    ClientBooks(Client client) {
        ...

        this.books = new ArrayList<>();
    }

    public void addBook(Book book) {
        this.books.add(book);
    }

    public void printBooks() {
        for (Book book : this.books) {
            System.out.println(book);
        }
    }
}

卖书可以这样实现:

List<Client> clients = ...

String buyer = ...
Book book = ...

for(Client client : clients) {
    if (client.getName().equals(buyer)) {
        client.addBook(book);
    }
}

【讨论】:

  • 在向客户销售一本书时,如何将其添加到该客户的特定数组列表中?
  • 如果您跟踪 ClientBooks 列表,则可以遍历此列表并检查与客户端名称匹配的每个元素。如果是这样,您可以调用 addBooks 方法。
  • 我接受了@WJS 的建议,我发现它更容易理解和应用,我已经完成了程序,谢谢你们。
  • 我也同意@WJS 的评论并相应地更新了我的答案。
  • @Laugslander - 很棒的 +1
【解决方案2】:

在每个类中覆盖toString 很重要。然后,当您打印该类的实例时,将打印该字符串而不是一些奇怪的值。

此方法还允许您一次添加所有图书或单独添加图书。

该课程尚未经过测试,但它应该让您了解如何进行。

class Client {
  String name;
  private List<Book> clientBooks = new ArrayList<>();
  public Client(String name) {
     this.name = name;
  }

  public addBooks(List<Book> books) {
      clientBooks.addAll(books);
  }

  public void addBook(Book bk) {
      clientBooks.add(bk);
  }

  public String toString() {
     StringBuilder sb = new StringBuilder(name).append(":");
     // add either the entire toString for book here or just selected
     // items like the title.  It's up to you.
     for (Book b :clientBooks) {
        sb.append(b.toString()).append(", ");
     }
     
     return sb.toString().substring(0,sb.length()-2);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多