我的问题的重点与takeInventory()
方法有关。
您可以假定InventoryDemo
的main()
方法是可以起作用的(除了takeInventory()
方法的实现)。
如果需要,可以找到其他类here。
我的takeInventory()
方法的目标是对我的list
进行排序,并报告Product
类型的每个唯一实例的整数值。
这只能通过名称区分:
产品(名称,费用)。
名称相同的Product
应分组在一起(不考虑费用)。
输出应报告以下内容:
我认为有一种对这些数据进行排序的方法比我目前的方法有效得多。但是,我不知道一个。
import java.util.*;
public class InventoryDemo
{
public static void main(String [] args) {
ArrayList<Product> list = new ArrayList<Product>();
list.add(new Car("Jaguar", 1000000));
list.add(new Car("Neon", 17000));
list.add(new Tool("JigSaw", 149.18));
list.add(new Car("Jaguar", 110000));
list.add(new Car("Neon", 17500));
list.add(new Car("Neon", 17875.32));
list.add(new Truck("RAM", 35700));
list.add(new Tool("CircularSaw", 200));
list.add(new Tool("CircularSaw", 150));
list.add(new Tool("saw1", 200));
list.add(new Tool("saw2", 150));
if(list.get(9).compareTo(list.get(10)) == 0) {
System.out.println("\nBoth saws are of equal value.");
} else if(list.get(9).compareTo(list.get(10)) > 0) {
System.out.println("\nThe first saw is more expensive.");
} else {
System.out.println("\nThe second saw is more expensive.");
}
takeInventory(list);
}
public static void takeInventory(ArrayList<Product> list) {
int inventory[] = new int[list.size()];
int counter = 0;
for(Product token: list) {
for(int x = 0; x < list.size(); x++) {
if(token.compareTo(list.get(x)) == 0) {
inventory[counter] = 0;
} else {
counter++;
}
}
}
for(int token : inventory) {
System.out.println(token);
}
}
}
如果不清楚,请执行以下操作:
我想对我的
takeInventory()
方法进行补救。此方法的目的是对给定的对象ArrayList
进行分类,并报告其唯一类型值的总和。输出中清楚地显示了这一点。输出的最后一个字符串文字是由我的main()方法中的条件产生的。其余的将通过takeInventory()
方法生产。我确定我当前的
takeInventory()
无法正常工作。 最佳答案
我将构建一个Map<String, C>
,其中C
是一个包含数量(int
)和成本(double
)的帮助程序类。遍历产品列表,并针对每个产品:
如果名称不在地图中,则将该名称关联到new C(1, cost)
。
如果名称在地图中,则将与名称关联的数量增加1
,并将与名称关联的成本增加cost
。
最后,遍历地图并打印结果;那么就完成了。
参考:http://docs.oracle.com/javase/7/docs/api/java/util/Map.html
这是一些代码:
import java.util.*;
class Product {
private String name;
private double cost;
public Product (String name, double cost) {
this.name = name;
this.cost = cost;
}
public String getName() {
return name;
}
public double getCost() {
return cost;
}
}
class Car extends Product {
public Car(String name, double cost) {
super(name, cost);
}
}
class Truck extends Product {
public Truck(String name, double cost) {
super(name, cost);
}
}
class Tool extends Product {
public Tool(String name, double cost) {
super(name, cost);
}
}
class Entry {
private int quantity = 1;
private double cost;
public int getQuantity() {
return quantity;
}
public double getCost() {
return cost;
}
public Entry(double cost) {
this.cost = cost;
}
public void add (double cost) {
quantity++;
this.cost += cost;
}
@Override
public String toString() {
return ("Quantity = " + quantity + ", Total cost = " + cost);
}
}
public class Inventory {
static void takeInventory(List<Product> list) {
Map<String, Entry> map = new HashMap<>();
for (Product p : list) {
Entry e = map.get(p.getName());
if (e == null) {
map.put(p.getName(), new Entry(p.getCost()));
} else {
e.add(p.getCost());
}
}
for (String s : map.keySet()) {
System.out.print(s);
Entry e = map.get(s);
System.out.println(" " + e);
}
}
public static void main(String [] args) {
ArrayList<Product> list = new ArrayList<Product>();
list.add(new Car("Jaguar", 100000));
list.add(new Car("Neon", 17000));
list.add(new Tool("JigSaw", 149.18));
list.add(new Car("Jaguar", 110000));
list.add(new Car("Neon", 17500));
list.add(new Car("Neon", 17875.32));
list.add(new Truck("RAM", 35700));
list.add(new Tool("CircularSaw", 200));
list.add(new Tool("CircularSaw", 150));
list.add(new Tool("saw1", 200));
list.add(new Tool("saw2", 150));
takeInventory(list);
}
}
输出:
saw1 Quantity = 1, Total cost = 200.0
saw2 Quantity = 1, Total cost = 150.0
CircularSaw Quantity = 2, Total cost = 350.0
RAM Quantity = 1, Total cost = 35700.0
JigSaw Quantity = 1, Total cost = 149.18
Jaguar Quantity = 2, Total cost = 210000.0
Neon Quantity = 3, Total cost = 52375.32