2015-04-13 3 views
0

Недавно я узнал кой-что: я понятия не имею, как использовать методы ToStringПечать Java ArrayList <Object> Дилемма

Любом. (Если вы видели мой последний вопрос, вы получите яркий пример.) , Я проходил некоторые незавершенные мои программы из класса Intro to Java, который я взял в прошлом году, и этого я просто не могу закончить. Мое стремление стать лучшим программистом столкнулось с окончательной задачей: toString.

Основной обзор заключается в том, что мне пришлось написать программу магазина «Бакалея», где класс ShoppingCart представлял собой ArrayList из продуктов бакалеи.

Там только один проблемно, когда я запускаю программу, я получаю

[email protected] 

Мой старый враг, ToString() выглядит, как это требуется. Выход я должен получать это:

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

теперь, если я распечатать Корзина ArrayList (System.out.println (Cart)) Я получаю это:

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

Именно выход I должно быть.

Как это происходит? Как я могу это исправить? Когда я распечатываю Cart Arraylist, я получаю вывод, который я хочу (я все еще получаю «Grocery.ShoppingCart @»). Мне нужно найти способ заменить «Grocery.ShoppingCart @ [и т. Д.]» На ArrayList.

Кто-нибудь есть какие-либо идеи Благодаря -Крис

биты класса 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()); 
} 

продуктовом класса распечатывания 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"); 
} 
+1

Можете ли вы разместить свой класс ShoppingCart? – bvulaj

+0

Да, да. На нем. –

+0

@ Vasei: Не вижу этого как связанного. – Makoto

ответ

2

Вы можете переопределить toString, чтобы вернуть все, что захотите. В вашем случае, похоже, что вы хотите сделать:

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

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

Я думал об этом, но я не пробовал. Большое вам спасибо! -Chris Примечание для самостоятельного изучения toString лучше. –

+0

Я рекомендую прочитать Q & A, с которым я связан, поскольку он обеспечивает хорошую детализацию. ;) – Radiodef

0

Метод Java по умолчанию toString() на любом объекте распечатает то, что вы видите («Grocery.ShoppingCart @ [и т. Д.]»). Это класс с хеш-кодом объекта, добавленным к нему.

Из того, что я вижу в этом выпуске, вы вызываете .toString() в экземпляре класса ShoppingCart, поэтому вы получаете этот вывод.

Чтобы этот класс распечатывал содержимое ArrayList-Cart, являющегося членом этого класса, вам необходимо переопределить метод toString() этого класса для печати содержимого ArrayList. Как только он будет переопределен, ваша реализация toString() будет вызываться, а не по умолчанию.

public String toString() { 
    // return the string that you want. 
} 

ToString() вызывается ShoppingCart при вызове System.out.println (ShoppingCart), чтобы извлечь строку для печати.

0

Да, вы будете нуждаться в toString() на вашем ShoppingCart.

Если я понимаю, что вы пытаетесь сделать, могу ли я предложить перейти к более традиционному подходу Java bean? Вот упрощенное представление.


Боб с геттером и сеттеры. Лучшее имя для этого может быть 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'}]} 

Кроме того, держаться подальше от прописных букв (например, , «Корзина») для имен переменных, поскольку это выглядит как статический вызов метода по соглашению.

Смежные вопросы