繁体   English   中英

计数和合并ArrayList中的实例

[英]Counting and Combining Instances in an ArrayList

我有以下类,它由ArrayList构造函数和一种方法组成,该方法旨在根据分配给它们的名称对对象的实例进行计数和合并。 方法getName()getCost在另一个类中提供。 对象由字符串(名称)和双精度(成本)描述。

import java.util.*;
public class InventoryDemo
{
    public static void takeInventory(List<Product> products)
    {
        String[] names = new String[products.size()];
        for (int i = 0; i < products.size(); i ++)
        {
            String currentName = products.get(i).getName();
            names[i] = currentName;
            double totalCost = products.get(i).getCost();
            int quantity = 0;
            for (int i2 = 1; i2 < products.size() - 1; i2 ++)
            {
                if (products.get(i).getName() == products.get(i2).getName())
                {
                   quantity ++;
                   totalCost = totalCost + products.get(i2).getCost();
                }
            }
            System.out.print(currentName + ": Quantity = " + quantity);
            System.out.println(", Total Cost = " + totalCost);   
        }
    }

    public static void main(String []args)
    {       
        List<Product> products = new ArrayList<Product>();        
            Car car1 = new Car("Jaguar", 1000000.00);
            products.add(car1);
            Car car2 = new Car("Neon", 17000.00);
            products.add(car2);
            Tool saw1 = new Tool("JigSaw", 149.18);
            products.add(saw1);
            Car car3 = new Car("Jaguar", 110000.00);
            products.add(car3);
            Car car4 = new Car("Neon", 17500.00);
            products.add(car4);
            Car car5 = new Car("Neon", 17875.32);
            products.add(car5);
            Truck truck1 = new Truck("RAM", 35700.00);
            products.add(truck1);
            Tool saw2 = new Tool("CircularSaw", 200.00);
            products.add(saw2);
            Tool saw3 = new Tool("CircularSaw", 150.00);
            products.add(saw3);
        takeInventory(products);
    }
}

输出应该显示每个特定对象(基于名称)以及它们出现的数量和它们的组合成本。 但是,其输出非常不正确。 有任何想法吗?

您的内部循环控制变量是不正确的,因为它总是从索引1开始,而它应该与外部循环成比例地从i + 1开始,因此您的内部循环应为:

for (int i2 = i + 1; i2 < products.size() - 1; i2++)

另一件事是,您应该将字符串与.equals()进行比较。

if (products.get(i).getName().equals(products.get(i2).getName()))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM