创建和更改Dart类的现有方法

h5qlskok  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(140)

我正尝试在Visual Studio代码上用 dart 编程,需要更多地了解 dart 的语法,以便能够编写所需的代码。

这些是我编写的类:

1.图书(定义书名、isbn、价格和可用性)

class Book {
    // properties
    late String _title;
    late int _isbn;
    late double _price;
    bool _isAvailable;
....
}
  1. BookCatalog(导入前一个类并定义当前图书列表+添加新书的方法)
class BookCatalog{

  // no arrays, everything is a list
  List<Book> _books = [];
...
}
  1. Main(导入先前的类并执行所需的输入)

我想更改的内容:

1.改进了BookCatalog类中的addBook方法,如果一本新书与现有图书具有相同的ISBN,则不添加新图书(当前确实如此)。(如果用户尝试添加具有相同ISBN的图书,则可能给予“false”消息)

// adds a book to the store
void addBook(book) {
    _books.add(book);
  }

1.改进BookCatalog类中的printBookCatalog方法,以便仅打印可用的图书,而不是添加到存储中的所有图书。

// Print books contained in the catalog
  void printBookCatalog() {
    print("List of Books:");
    for (var book in _books) {
      print(book);
    }
  }

1.改进BookCatalog类中的getBook方法,* 实际上 * 通过ID获取图书,因为它现在不工作。

// Get a book by id
  Book getBook(int place) => _books[place];


1.改进了BookCatalog类中的calculateAvgPrice方法,用于计算图书的平均价格,但目前为止它还不能正常工作

// NEW, calculates average price of books
  Book calculateAvgPrice(double price) {
    for(var book in _books) {
      sum += book.Price;
    }
    return sum / _books.length;
  }

1.在BookCatalog类中创建一个新方法以从目录中删除图书
答案可能是,但我不确定:

// deletes book from the catalog
   void deleteBook(book) {
    _books.remove(book);
  }

任何帮助,解释,例子或外部来源阅读了 dart 将不胜感激!
(特别是针对我的具体案例的例子)

xuo3flqw

xuo3flqw1#

我建议先通过Dart Language Tour
(Side注:ISBN有前导零和连字符,所以最好使用String代替int
BookCatalog类中,可以使用Map代替List

class BookCatalog {
  Map<String, Book> _books = {}; // Map from ISBN to Book
  // ...
}

1.这里我假设这两个类都在同一个文件中,否则访问私有成员将不起作用,因此您必须有可用的公共getter。

/// Adds a book to the store only if the ISBN does NOT exist.
bool addBook(Book book) {
  if (_books.containsKey(book._isbn)) {
    return false;
  }
  _books[book._isbn] = book;
  return true;
}

1.缺少if条件。

void printBookCatalog() {
  print("List of Books:");
  for (final book in _books.values) {
    if (book._isAvailable) {
      print(book);
    }
  }
}

1.假设您所指的id是它的ISBN,它返回一个可以为空的Book?,因为该ISBN可能在目录中不存在。

// Get a book by id
Book? getBook(String isbn) => _books[isbn];

1.这个函数的返回类型是double,而不是Book,因为它是平均价格。你也不需要为这个函数提供任何参数。而且你需要在使用它之前先定义sum变量!

double calculateAvgPrice() {
  var sum = 0.0;
  for (final book in _books.values) {
    sum += book._price;
  }
  return sum / _books.length;
}

1.假设您要按ISBN删除图书:

bool removeBook(String isbn) {
  return _books.remove(isbn) != null;
}

相关问题