verschieben negative Preisprüfung
Hoist die itemPrice < 0
Scheck aus dem ersten if
Block. Diese Fehlerprüfung sollte auf allen Codepfaden vorhanden sein, nicht nur auf der ersten. Überprüfen auf einem negativen Preis, bevor sie aus dem Budget abgezogen wird halten Sie von der mit ihm in hinzufügen zurück.
while (budgetRemaining > 0) {
System.out.println("You have a remaining budget of $" + budgetRemaining + ". Please enter price of item:");
itemPrice = enterPrice.nextDouble();
if (itemPrice < 0) {
System.out.println("Sorry, you have entered an invalid amount. ");
continue;
}
...
}
Kombinieren Fälle
Ich würde dann die <
und ==
Fällen kombinieren. Halten Sie die Logik so ähnlich wie möglich: subtrahieren Sie immer itemPrice
. Der einzige Unterschied ist, dass Sie eine Nachricht ausdrucken, wenn Sie fertig sind. Da Sie eine Schleifenbedingung haben, die das prüft, können Sie den endgültigen Ausdruck außerhalb der Schleife verschieben und den if (itemPrice == budgetRemaining)
Scheck vollständig entfernen.
while (budgetRemaining > 0) {
System.out.println("You have a remaining budget of $" + budgetRemaining + ". Please enter price of item:");
itemPrice = enterPrice.nextDouble();
if (itemPrice < 0) {
System.out.println("Sorry, you have entered an invalid amount. ");
continue;
}
if (itemPrice <= budgetRemaining) {
budgetRemaining -= itemPrice;
}
else if (itemPrice > budgetRemaining) {
System.out.println("Sorry, your item exceeds your budget.");
}
}
System.out.println("You have reached your maximum budget. Thank you for shopping with us!");
redundante entfernen else if
Da die if
und else if
Kontrollen sind jetzt gerade Gegensätze, kann der zweite ein einfaches else
werden.
if (itemPrice <= budgetRemaining) {
budgetRemaining -= itemPrice;
}
else {
System.out.println("Sorry, your item exceeds your budget.");
}
Früh Ausfahrt
Außer ich die Reihenfolge wechseln würde, so dass Sie überprüfen das Budget zunächst für die Überschreitung. Da wir die itemPrice < 0
Prüfung vorne haben, ist es sinnvoll, auch vor diesem anderen Fehlerzustand zu prüfen.
while (budgetRemaining > 0) {
System.out.println("You have a remaining budget of $" + budgetRemaining + ". Please enter price of item:");
itemPrice = enterPrice.nextDouble();
if (itemPrice < 0) {
System.out.println("Sorry, you have entered an invalid amount. ");
continue;
}
if (itemPrice > budgetRemaining) {
System.out.println("Sorry, your item exceeds your budget.");
continue;
}
budgetRemaining -= itemPrice;
}
System.out.println("You have reached your maximum budget. Thank you for shopping with us!");
Diese Art der Fehlerprüfung + früh mit continue
Verlassen macht es einfach, was der Normalfall ist, um zu sehen: die budgetRemaining -= itemPrice
Aussage jetzt liegt außerhalb jeder Bedingung. Es wurde zum Hauptcodepfad befördert. Es ist klar, dass die anderen Prüfungen und Ausdrucke Voraussetzungen sind.
Alternativ könnten Sie dies mit einer if
/else
Kette schreiben. Entweder funktioniert es. Jetzt geht es nur um stilistische Vorlieben.
if (itemPrice < 0) {
System.out.println("Sorry, you have entered an invalid amount. ");
}
else if (itemPrice > budgetRemaining) {
System.out.println("Sorry, your item exceeds your budget.");
}
else {
budgetRemaining -= itemPrice;
}
Wenn Ihr Code bereits funktioniert und Sie nur ein paar Augenpaare haben möchten, die Ihren Arbeitscode überprüfen, dann ist unsere Schwesterseite [Code Review] (https://codereview.stackexchange.com) ein besserer Ort dafür diese Frage. –
Aus der Spitze meines Kopfes kann 'if (itemPrice == budgetRemaining)' vollständig durch 'else' ersetzt werden, da Sie bereits behauptet haben, dass der Artikelpreis nicht kleiner oder größer als das verbleibende Budget ist, daher muss es sein gleich. –
Dies wurde gerade ersetzt. Und ich werde Code Review für die zukünftige Verwendung überprüfen, danke für den Vorschlag! –