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());
}
}
Warum zurück in die Schleife? – Steephen
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. –
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