最近,我学到了一些东西:我不知道如何使用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");
}
答案 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”)以获取变量名称,因为它看起来像按惯例的静态方法调用。