как получить доступ к объекту конструктора из списка массивов. я пытаюсь использовать логику ниже, но она не работает

#java

#java

Вопрос:

  1. Напишите Java-программу для вычисления общей цены каждой книги, где название книги // уникально. Базовый код приведен ниже.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ
Общая цена продажи для программирования на Java составляет 3640
Общая цена продажи для Learn PH составляет 640,50
Общая цена продажи для ReactJS для чайников составляет 4800
Общая цена продажи для ANSI C составляет 1110

 import java.io.*;
import java.util.*;

class javaQ {
public static void main (String[] args) {

Book  prod1 = new Book ("Java Programming",520, 2);
Book  prod2 = new Book ("Learn PHP",213.50, 3);
Book  prod3 = new Book ("ReactJS for Dummies",320, 8);
Book  prod4 = new Book ("Java Programming",520, 5);
Book  prod5 = new Book ("ReactJS for Dummies",320, 7);
Book  prod6 = new Book ("ANSI C",222, 5);
List<Book > myList = new ArrayList<Book >();
myList.add(prod1);
myList.add(prod2);
myList.add(prod3);
myList.add(prod4);
myList.add(prod5);
myList.add(prod6);
int i=0,totalprice=0,totalqantity=0;
for(i=0;i<=myList.size();i  )
{
  String bookname=myList.getName();
  System.out.println(bookname);
  String price=myList.getPrice();
  String quantity=myList.getInt();
  if(bookname.equal.("Java Programing"))
  {
    totalprice=totalprice 
  }
  
}
  

Комментарии:

1. Вот синтаксическая ошибка: totalprice=totalprice . Сначала попробуйте это исправить.

2. Здравствуйте, фрагмент кода неполный и не компилируется. Вам нужно сгруппировать по названию книги и рассчитать общее количество и стоимость для каждой книги, и вы можете использовать Map/HashMap , где вы храните новые книжные проекты с накопленным количеством и значением,

Ответ №1:

Вы можете написать красивое решение, используя карты

public static void main (строка [] аргументы) {

     Book  prod1 = new Book ("Java Programming",520, 2);
    Book  prod2 = new Book ("Learn PHP",213.50, 3);
    Book  prod3 = new Book ("ReactJS for Dummies",320, 8);
    Book  prod4 = new Book ("Java Programming",520, 5);
    Book  prod5 = new Book ("ReactJS for Dummies",320, 7);
    Book  prod6 = new Book ("ANSI C",222, 5);
    
    List<Book > myList = new ArrayList<Book >();
    myList.add(prod1);
    myList.add(prod2);
    myList.add(prod3);
    myList.add(prod4);
    myList.add(prod5);
    myList.add(prod6);
    
    
    
    Map<Book,Double> bookMap = new HashMap<>();
    
    for (Book book : myList) {
        bookMap.putIfAbsent(book, 0.0);
        bookMap.compute(book, (currentBook, price) -> price   currentBook.getPrice() * currentBook.getQuantity());
    }
    
    for(Entry<Book, Double> bookEntry : bookMap.entrySet()) {
        System.out.println(bookEntry.getKey().getName()   " : "   bookEntry.getValue());
    }
    
}
  

Вы также должны реализовать метод equals и hashcode в классе Book .

 @Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result   ((name == null) ? 0 : name.hashCode());
    return resu<
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Book other = (Book) obj;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    return true;
}
  

Ответ №2:

  1. Создайте a Map<String, Book> для доступа к информации о книге с накопленными данными по названию книги. Вы можете использовать a TreeMap , тогда ключи будут отсортированы в алфавитном порядке.
  2. Для каждой книги проверьте, существует ли книга с заданным именем на карте, если нет, создайте новый экземпляр Book
  3. Добавьте количество и цену в книгу на карте.
  4. Распечатайте записи карты.
 Map<String, Book> totals = new TreeMap<>();
for (Book book : myList) {
    Book total = totals.getOrDefault(book.getName(), new Book(book.getName(), 0, 0));
    total.setInt(total.getInt()   book.getInt());
    total.setPrice(total.getPrice()   book.getPrice() * book.getInt());
    totals.putIfAbsent(book.getName(), total);
}

for (Map.Entry<String, Book> entry : totals.entrySet()) {
    Book total = entry.getValue();
    System.out.printf("Total Selling Price for %s is %.2f%n", 
        total.getName(), total.getPrice());
}
  

В предыдущем фрагменте кода предполагается, что класс Book имеет следующие параметры для цены и количества:

 public class Book {
    private String name;
    private double price;
    private int quantity;
    public Book(String name, double price, int quantity) {
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public double getPrice() { return price; }
    public void setPrice(double price) { this.price = price; }

    public int getInt() { return quantity; }
    public void setInt(int quantity) { this.quantity = quantity; }
}