2017-09-23 3 views
0

UPDATE: Bitte lesen Sie den zweiten Teil dieses Post, der "UPDATE" liest. Ich habe einige Teile des Codes erhalten, um seit dem ursprünglichen Beitrag zu funktionieren. Vielen Dank!Enhanced für Schleife nicht ausgeführt

Ich habe eine for-Schleife in meinem toString-Methode verbessert, die einen String zurückgibt:

public String toString() { 
    for (SelectedItem item: cartItems) { 
     return "Item: " + item.getItemNumber() + "\nQuantity: " + item.getQuantity + "\nUnit Price: $" + item.getUnitPrice + "\nTotal Price: $" + (item.getUnitPrice * item.getQuantity); 
    } 
     return ""; 
} 

jedoch alle meine Code zurückkehrt ist:

"[]

[]". Ich glaube, dass mein Code nur den Return-Teil und nicht den Return-Item: ... '"-Abschnitt ausführt. Als Referenz hier ist meine volle Klasse:

import java.util.*; 

public class ShoppingCart implements Cart { 

private double total; 
private double tax; 
private double shipping; 
private int totalQuantity = 0; 
ArrayList<SelectedItem> cartItems = new ArrayList<SelectedItem>(); 

public ShoppingCart() { 
} 

public void addItem(SelectedItem newItem) {  
    for (SelectedItem item: cartItems) { 
     if (newItem.getItemNumber() == item.getItemNumber()) { 
      totalQuantity = newItem.getQuantity() + totalQuantity; 
     } else { 
      totalQuantity = newItem.getQuantity(); 
      cartItems.add(new SelectedItem(newItem.getItemNumber(), newItem.getDescription(), newItem.getUnitPrice(), newItem.getQuantity())); 
     } 

    } 
} 

public void deleteItem(int deleteItemNumber) { 

} 

public double getTotal() { 
    return total; 
} 

public double getTax() { 
    tax = total * 0.045; 
    return tax; 
} 

public double getShipping() { 
    if (total <= 10) { 
     shipping = 2.50; 
    } else { 
     shipping = total * 0.15; 
    } 
    return shipping; 
} 

public String toString() { 
    for (SelectedItem item: cartItems) { 
     return "Item: " + item.getItemNumber() + "\nQuantity: " + item.getQuantity + "\nUnit Price: $" + item.getUnitPrice + "\nTotal Price: $" + (item.getUnitPrice * item.getQuantity); 
    } 
     return ""; 
} 

}

und hier ist die SelectedItem Klasse:

public class SelectedItem implements Item { 

private int itemNumber; 
private String description; 
private double unitPrice; 
private int quantity; 

public SelectedItem(int itemNumber, String description, 
     double unitPrice, int quantity) { 
    this.itemNumber = itemNumber; 
    this.description = description; 
    this.unitPrice = unitPrice; 
    this.quantity = quantity; 
} 

public int getItemNumber() { 
    return itemNumber; 
} 

public double getUnitPrice() { 
    return unitPrice; 
} 

public String getDescription() { 
    return description; 
} 

public int getQuantity() { 
    return quantity; 
} 

public void setQuantity(int newQuantity) { 
    quantity = newQuantity; 
} 

}

Schließlich meine Tester Klasse, die angeblich Erstellen von Instanzen des SelectedItem-Objekts:

public class CartTester { 

public static void main(String[] args) { 

    ShoppingCart cart1 = new ShoppingCart(); 
    cart1.addItem(new SelectedItem(1, "widget", 0.95, 5)); 
    cart1.addItem(new SelectedItem(2, "gadget", 0.25, 10)); 
    cart1.addItem(new SelectedItem(3, "doohickey", 0.35, 3)); 
    cart1.deleteItem(2); 
    cart1.addItem(new SelectedItem(3, "doohickey", 0.35, 2)); 
    cart1.addItem(new SelectedItem(4, "thingamabob", 0.12, 7)); 
    System.out.println(cart1.toString()); 

    ShoppingCart cart2 = new ShoppingCart(); 
    for (int i = 1; i <= 1000; i++) { 
     String nameString = "Volume " + i; 
     cart2.addItem(new SelectedItem(i, nameString, 10.99, i)); 
    } 
    System.out.println("**********"); 
    System.out.println(cart2.toString()); 
} 

}

Bitte helfen Sie mir! Hier ist das Snippet, wie die Ausgabe aussehen soll:

Item: widget 
Quantity: 5 
Unit Price: $0.95 
Total Price: $4.75 

UPDATE: Ich habe meinen Code bekommen folgendes auszudrucken:

aItem: widget 
Quantity: 5 
Unit Price: $0.95 
Total Price: $4.75 

********** 
Item: Volume 1 
Quantity: 1 
Unit Price: $10.99 
Total Price: $10.99 

.. Aber es noch doesn‘ t drucken Sie alle Artikel in ShoppingCart aus. Ich habe meine ShoppingCart-Klasse geändert und denke, dass das Problem entweder die AddItem-Methode oder die toString-Methode ist. Hier ist meine aktualisierte ShoppingCart Klasse:

import java.util.*; 

public class ShoppingCart implements Cart { 

private double total; 
private double tax; 
private double shipping; 
private int totalQuantity = 0; 
ArrayList<SelectedItem> compareTo = new ArrayList<SelectedItem>(); 
ArrayList<SelectedItem> cartItems = new ArrayList<SelectedItem>(); 
String itemDescription = ""; 
int itemQuantity; 
double itemUnitPrice; 
double itemTotal; 

public ShoppingCart() { 

    } 

public void addItem(SelectedItem newItem) { 
    boolean found = false; 
    if (cartItems != null && !cartItems.isEmpty()) { 
     for (SelectedItem item : cartItems) { 
      if (newItem.getItemNumber() == item.getItemNumber()) { 
       found = true; 
       item.setQuantity(newItem.getQuantity() + item.getQuantity()); 
      } 
     } 
    } else { 

    } 
    if (found) { 

    } else { 
     cartItems.add(new SelectedItem(newItem.getItemNumber(), newItem.getDescription(), newItem.getUnitPrice(), newItem.getQuantity())); 
    } 

} 

public void deleteItem(int deleteItemNumber) { 
    for (SelectedItem item: cartItems) { 
     if (deleteItemNumber == item.getItemNumber()) { 
      item.setQuantity(0); 
     } 
    } 
} 

public double getTotal() { 
    for (SelectedItem item: cartItems) { 
     total = item.getQuantity() * item.getUnitPrice(); 
    } 
    return total; 
} 

public double getTax() { 
    tax = total * 0.045; 
    return tax; 
} 

public double getShipping() { 
    if (total <= 10) { 
     shipping = 2.50; 
    } else { 
     shipping = total * 0.15; 
    } 
    return shipping; 
} 

public String toString() { 
     for (SelectedItem item: cartItems) { 
      return ("Item: " + item.getDescription() + "\nQuantity: " + item.getQuantity() + "\nUnit Price: $" 
     + item.getUnitPrice() + "\nTotal Price: $" + (item.getQuantity()*item.getUnitPrice()) + "\n"); 
     } 
      return "\nTotal: $" + getTotal() + "\nTax: $" + getTax() + "\nShipping: $" + getShipping() + 
        "\nGRAND TOTAL: $" + (getTotal() + getTax() + getShipping()); 
    } 
} 
+0

Warum zurück in die Schleife? – Steephen

+0

Wie @Steephen: states, eine Rückkehr in die Schleife bewirkt, dass es sich nicht mehr wie eine Schleife verhält. Es macht nur das, wofür du es programmierst. Sie führen keinen kritischen Debugging-Schritt durch - Sie müssen Ihren Code mental durchgehen, um zu sehen, was er tut, während er ausgeführt wird, einschließlich jeder Schleife in Ihrem Kopf. Wenn Sie das nicht lernen, werden Sie den Code oder die Fehler nicht verstehen. –

+0

Nein, das verstehe ich, aber ich brauche eine return-Anweisung nach der for-Schleife, weil sie den Fehler "Diese Methode muss ein Ergebnis vom Typ String zurückgeben" zurückgibt. Und der Methodentyp ist String, also muss ich eine Zeichenkette zurückgeben. – Dylan

Antwort

-1

Wie bereits in den Kommentaren erwähnt eine Rückkehr-Anweisung ist falsch, wenn Sie nur das erste Element drucken möchten. So sollten Sie besser tun, wie folgt:

  1. fügen Sie den folgenden toString() Methode in ShoppingCart:

    public String toString() { 
        StringBuilder sb = new StringBuilder(); 
        for (SelectedItem item : cartItems) { 
         sb.append("Item: " + item.getDescription() + "\nQuantity: " + item.getQuantity() + "\nUnit Price: $" + item.getUnitPrice() + "\nTotal Price: $" + (item.getQuantity()*item.getUnitPrice()) + "\n\n"); 
        } 
        return sb.toString(); 
    } 
    
  2. Schließlich Ihre addItems Methode geändert werden soll, wie folgt:

    public void addItem(SelectedItem newItem) { 
        boolean found = false; 
        if (cartItems != null && !cartItems.isEmpty()) { 
         for (SelectedItem item : cartItems) { 
          if (newItem.getItemNumber() == item.getItemNumber()) { 
           found = true; 
          } 
         } 
        } 
        if (found) { 
         totalQuantity += newItem.getQuantity(); 
        } else { 
         totalQuantity = newItem.getQuantity(); 
         cartItems.add(new SelectedItem(newItem.getItemNumber(), newItem.getDescription(),newItem.getUnitPrice(), newItem.getQuantity())); 
        } 
    } 
    
+0

Ich habe vergessen zu erwähnen, dass die einzige Klasse, die ich bearbeiten darf, die ShoppingCart-Klasse ist. Daher bin ich beim Bearbeiten meines Codes sehr eingeschränkt. Ich habe meinen Code leicht meine eigenen Methoden und Ihren Vorschlag mit, modifiziert und haben es bekommen auszudrucken: Item: Widget Menge: 5 Einheitspreis: $ 0.95 Gesamtpreis: $ 4,75 ********* * Artikel: Volume 1 Menge: 1 Einheitspreis: $ 10.99 Gesamtpreis: $ 10.99 Aber es immer noch nicht alle Artikel in den Warenkorb ausdrucken. Ich werde meine aktualisierte ShoppingCart-Klasse veröffentlichen, da dies die einzige ist, die von dem obigen Post geändert wurde. – Dylan

+0

Ich habe die 'toString()' Methode der 'ShoppingCar' Klasse modifiziert. Die 'addItem()' Methode sollte unverändert verwendet werden. Versuch es. Sie sollten auch die Klasse in der ursprünglichen Frage bearbeiten, anstatt eine neue hinzuzufügen. – ujulu

+0

Danke für die Hilfe. Das Problem war die Rückkehr Aussage. Sobald ich System.out.println verwendet habe, hat es funktioniert! – Dylan