打印Java ArrayList <object> Dilemma </object>

时间:2015-04-13 02:29:49

标签: java

最近,我学到了一些东西:我不知道如何使用toString方法。(如果你看过我的上一个问题,你会得到一个很好的例子。)

无论如何,我正在经历一些未完成的程序,从去年的一个简介到Java课程,这个我无法完成。我努力成为一名优秀的程序员面临着最终的挑战:toString方法。

基本概述是我必须编写一个'Grocery'商店程序,其中ShoppingCart类是Grocery Objects的ArrayList。

只有一个问题 - 当我运行程序时我得到了

Grocery.ShoppingCart@2eeb3c84

我的老敌人,toString()看起来像是必需的。 我应该得到的输出是:

[Tomatoes: 2.76 $1.39, Mac & Cheese: 6.0, $0.89]

现在,如果我打印出Cart ArrayList(System.out.println(Cart)),我就明白了:

[Tomatoes, 2.76, $1.39, Mac & Cheese, 6.0, $0.89]

我应该得到的输出。

这是怎么发生的?我怎样才能解决这个问题? 当我打印出购物车Arraylist时,我得到了我想要的输出(我仍然得到“Grocery.ShoppingCart @)。我必须找到一些方法用ArrayList替换”Grocery.ShoppingCart @ [etc。]“。 / p>

有人有什么想法吗? 谢谢! -Chris

ShoppingCart类的位:

ArrayList<Grocery> Cart = new ArrayList<Grocery>();
int size = Cart.size();
double tot = 0.0;
public ShoppingCart(){
}
...
public void printReceipt() {
    Grocery temp = new Grocery();
    double pr = 0.0;
    double qu = 0.0;
    String n = "";
    String con = "IF YOU SEE ME SOMETHING IS WRONG!";
    double gr = 0.0;
    for(int k = 0; k < size; k++){
        temp = Cart.get(k);
        n = temp.getName();
        qu = temp.getQuan();
        pr = temp.getPrice();
        tot = qu * pr;
        con = n + ":" + " " + qu + ", " + pr + "\t\t Total: $" + tot;
    }
    System.out.println("====RECIEPT====");
    System.out.println("Grand Total:\t" + "$" + totalPr());
}

Grocery Class Printing out ShoppingCart

public static void testShoppingCartClass ()
{
    System.out.println ("Testing ShoppingCart class\n");
    ShoppingCart myCart = new ShoppingCart();

    System.out.println ("  ShoppingCart using default constructor: ");
    System.out.println ("\t" + myCart);

    myCart.addItem (new Grocery("Tomatoes", 2.76, 1.39));
    myCart.addItem (new Grocery("Mozzarella", 0.95, 4.59));
    myCart.addItem (new Grocery("Mac & Cheese", 6, 0.89));
    System.out.println ("\n  ShoppingCart after adding three items: ");
    System.out.println ("\t" + myCart);
    myCart.removeItem (1);
    System.out.println ("\n  ShoppingCart after removing an item: ");
    System.out.println ("\t" + myCart);

    System.out.println ("\n\nPrinting receipt: \n");
    myCart.printReceipt();

    System.out.println ("\n\nDone testing ShoppingCart class\n\n");
}

3 个答案:

答案 0 :(得分:2)

您可以覆盖toString以返回您想要的内容。在您的情况下,它看起来像你想要做的:

class ShoppingCart {
    ArrayList<Grocery> cart;
    ...

    @Override
    public String toString() {
        return cart.toString();
    }
}

答案 1 :(得分:0)

Java在任何对象上的默认toString()方法都会打印出你所看到的内容(&#34; Grocery.ShoppingCart @ [etc。]&#34;)。这是Class的对象的哈希码附加到它的末尾。

从我在该输出中看到的内容,您在ShoppingCart类的实例上调用.toString(),这就是您获得该输出的原因。

为了让该类打印出ArrayList - Cart(该类的成员)的内容,您需要覆盖该类的toString()方法以打印ArrayList的内容。一旦被覆盖,将调用toString()的实现而不是默认值。

public String toString() {
    // return the string that you want.
}
当您调用System.out.println(shoppingCart)以检索要打印的字符串时,在shoppingCart上调用

toString()。

答案 2 :(得分:0)

是的,您需要toString()上的ShoppingCart

如果我理解你想要做什么,我可以建议采用更传统的Java bean方法吗?这是一个简单的观点。


Bean with getter and setters。对此更好的名称可能是Item。您也可以根据需要更改类型。

public class Grocery {

    public BigDecimal getQuantity() {
        return quantity;
    }

    public void setQuantity(BigDecimal quantity) {
        this.quantity = quantity;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getName() {
        return name;
    }

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

    private BigDecimal quantity;

    private BigDecimal price;

    private String name;

    @Override
    public String toString() {
        return "Grocery{" +
               "quantity=" + quantity +
               ", price=" + price +
               ", name='" + name + '\'' +
               '}';
    }
}

你的购物车:

public class ShoppingCart {

    List<Grocery> contents;

    public void initialize() {
        contents = new ArrayList<Grocery>();  
    }

    public void addItem(Grocery item) {
        contents.add(item);
    }

    public void removeItem(Grocery item) {
        boolean wasRemoved = contents.remove(item);
        if (!wasRemoved) {
            System.out.println("Item not found in cart: " + item);
        }
    }

    public List<Grocery> getContents() {
        return contents;
    }

    @Override
    public String toString() {
        return "ShoppingCart{" +
               "contents=" + contents +
               '}';
    }
}

还有一些课程来运行它:

public class CartRun {

    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();
        cart.initialize(); 
        Grocery item = new Grocery();
        item.setName("Tomatoes");
        item.setPrice(BigDecimal.valueOf(2));
        item.setQuantity(BigDecimal.valueOf(3));

        cart.addItem(item);

        System.out.println("Item="+item);
        System.out.println("Cart="+cart);
    }
}

输出:

Item=Grocery{quantity=3, price=2, name='Tomatoes'}
Cart=ShoppingCart{contents=[Grocery{quantity=3, price=2, name='Tomatoes'}]}

另外,请远离大写字母(例如“Cart”)以获取变量名称,因为它看起来像按惯例的静态方法调用。