【问题标题】:One of my classes will not output anything我的一门课不会输出任何东西
【发布时间】:2015-04-15 12:50:20
【问题描述】:

所以我需要一些建议,我已经编写了一些代码很长一段时间了,但我似乎永远无法找出为什么我的代码搞砸了。我的 Product 类中的 toString 行之一似乎无法正常工作。代码如下:

import java.util.ArrayList;
public class lab24ArrayList
{

    public static void main(String[]args)
    {
        ShoppingCart cart = new ShoppingCart();

        Product hat = new Product ("Hat", 10);
        Product scarf = new Product ("Scarf", 8);
        Product legos = new Product ("Legos", 19);
        Product dvd = new Product ("DVD", 12);

        System.out.println("Removing DVD: "+cart.remove(dvd));

        cart.add(hat);
        cart.add(scarf);

        cart.remove(scarf);


        System.out.println("Removing Scarf: " +cart.remove(scarf));

        cart.add(legos);
        cart.add(dvd);
        cart.add(legos);

        System.out.println(cart);


    }
}

class ShoppingCart
{

    ArrayList <Product> cart;

    public ShoppingCart()
    {
        cart = new ArrayList<Product>();    
    }

    public int  size()
    {
        int k = cart.size();
        return k;
    }

    public void add(Product p)
    {                                            
        cart.add(p);                

    }
    public Product remove(Product p)
    {
        if(cart.contains(p))
        {
            cart.remove(p);
            return p;
        } 
            else
                return null;
    }   

}

class Product
{
    private String name;
    private double price;

    public Product(String _name, double _price)
    {
        name = _name;
        price = _price;
    }

    public String getName() {return name;}
    public double getPrice() {return price;}
    public String toString() {return name + ": $"+price;}

}

当我把它放入编译器时,我得到的只是:

Removing DVD: null
Removing Scarf: null
ShoppingCart@c2f0bd7

当我需要得到这个时:

Removing DVD: null
Removing Scarf: Scarf: $8
Items: 6
Total: $60.00

Hat: $10
Legos: $19
DVD: $12
Legos: $19

【问题讨论】:

  • 您的toString() 方法没有问题...Scarf 被删除两次,第二次返回null,因为没有留下任何物品。 ShoppingCart 不会覆盖 toString(),因此会打印 Object.toString() 返回的任何内容。

标签: java class tostring


【解决方案1】:

您在 ShoppingCart 上缺少 toString() 方法,这就是您获得 ShoppingCart@c2f0bd7 的原因。覆盖 ShoppingCartclass 中的 toString() 以从其中的项目构建字符串。

您还要取下围巾两次,一次是在这里cart.remove(scarf),然后也是在System.out.println("Removing Scarf: " +cart.remove(scarf))

为了阐明如何打印购物车,您需要在 ShoppingCart 中创建一个 toString 方法,类似于您在 Product 中所做的:

public static String toString() {
    StringBuilder stringBuilder = new StringBuilder();
    for(Product product : cart) {
        stringBuilder.append(product);
    }
    return stringBuilder.toString();
}

这将创建一个 StringBuilder,遍历购物车中的每个产品并将其附加到 StringBuilder。然后你返回那个字符串。

【讨论】:

  • 那么究竟该如何构建这个字符串呢?我没有看到你输入的确切内容,每当我尝试调用 Product 类时,我都会搞砸。
  • 我已经添加了关于如何通过在 ShoppingCart 中创建 toString 方法来打印购物车的说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2021-02-27
相关资源
最近更新 更多