建议使用toString

时间:2014-01-26 10:44:51

标签: java class tostring

我正在尝试制作一个新程序,其中有一个名为GroceryItem的类,第二个是GroceryList,第三个是MAIN方法,其中我想要使用的所有项目都是。

我已经制作数组以将这些项目放在那里,但是当我尝试打印这些项目时,只有文件名出来而不是项目而没有别的,请帮助。

这是我的代码:

GROCERYITEM:

public class GroceryItem {

    private String name;
    private int quantity;
    private double pricePerUnit;

    public GroceryItem(int quantity, String name, double pricePerUnit) {
        setName(name);
        setQuantity(quantity);
        setPriceperUnit(pricePerUnit);
    }

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

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

    public void setPriceperUnit(double pricePerUnit) {
        this.pricePerUnit = pricePerUnit;

    }

    public String getName() {
        return name;
    }

    public int getQuantity() {
        return quantity;
    }

    public double getPricePerUnit() {
        return pricePerUnit;
    }

    public double getCost() {
        return quantity * pricePerUnit;
    }
}

GROCERYLIST:

import java.util.*;

public class GroceryList {

    private GroceryItem item [];
    private int totalItems;

    public GroceryList() {
        this(10);
    }

    public GroceryList(int itemsOnList) {
        item = new GroceryItem[itemsOnList];
    }

    // Constructs a new empty grocery list.
    public boolean addItem(GroceryItem items) {
        boolean added = false;

        try {
            item[totalItems] = items;
            ++totalItems;
            added = true;
        }catch (Exception e) {
            added = false;
        }
        return added;
    }
    public String toString(){
        String retuurn = "";
        for (GroceryItem items : item) {
            if(items != null){
                retuurn += item.toString() + "\n";
            }
        }
        return retuurn;
    }
}

MAIN:

import java.util.Arrays;

public class GroceryItemList {

    public static void main(String[] args) {

        System.out.println("Quantity:   " + "Name:      " + "Price Per Unit:    "
                + " Total:");
        GroceryItem rice = new GroceryItem(1, "Rice", 5.00);

        GroceryItem fish = new GroceryItem(2, "Fish", 9.50);

        GroceryItem cake = new GroceryItem(3, "Cake", 5.00);

        GroceryList liste = new GroceryList(10);

        liste.addItem(rice);
        liste.addItem(fish);
        liste.addItem(cake);

        System.out.println(liste.toString());

        System.out.println("-----------------------------------------------");

    }

}

4 个答案:

答案 0 :(得分:1)

要学习的一课:为变量使用合理的名称。它们对编译器可能无关紧要,但它们对于非常重要。

您在GroceryList中使用了不直观的变量名称:

  for (GroceryItem items : item) {
      if(items != null){
          retuurn += item.toString() + "\n";
      }
  }

您调用数组item以及数组items中的项目。这使你在

中使用了错误的变量
retuurn += item.toString() + "\n";

您应该使用

retuurn += items.toString() + "\n";

一旦超过此错误,您会发现每个项目仍然会收到神秘的字符串,因为您没有覆盖GroceryItem.toString(),因此它已继承Object.toString(),其行为与您目睹的一样。使用根据您的喜好生成字符串的方法覆盖GroceryItem.toString()

答案 1 :(得分:1)

对于每个循环,类GroceryList.In中toString()的更新很少,应该是items.toString()

@Override
    public String toString(){
        String retuurn = "";
        for (GroceryItem items : item) {
            if(items != null){
                retuurn += **items**.toString() + "\n";

            }
        }
        return retuurn;
    }

还覆盖GroceryItem类中的toString()。希望这会有所帮助。

答案 2 :(得分:0)

要打印您需要的项目中的数据,就像在GroceryList中一样覆盖GroceryItem中的toString方法。

在GroceryItem中,添加以下内容以通过调用toString来打印GroceryItem的名称:

public String toString(){
    return getName();
}

答案 3 :(得分:0)

默认的toString方法不知道您期望输出的方式。因此,默认行为是它打印类的类型,最可能是地址。如果您打算打印列表,则必须编写循环

这是您编写的用于覆盖toString的代码。您还在循环retuurn

中为retur使用了不正确的可靠名称
public String toString(){
    String retuurn = "";
    for (GroceryItem items : item) {
        if(items != null){
            retuurn += item.toString() + "\n"; 
            // Your variable name in your original question is retur, I'm assuming that as typo
        }
    }
    return retuurn;
}

此代码的问题是它使用了您尚未创建的item.toString(),因此它使用默认的toString方法,该方法不知道要返回哪些数据。使用retuurn += item.getName()+"\n";

或者,您可以在GroceryItem.java中创建一个toString,它返回您想要返回的数据。示例代码如下。

public String toString(){ // inside GroceryItem.java
   return this.name; // or return this.name & ";" & this.quantity; or what ever that should be returned. 
}