2017-12-17 17 views
1

Ich habe das Gefühl, dass es zu viele if-Aussagen gibt, gibt es einen Weg, es weiter zu vereinfachen? Ich habe es ein wenig reduziert, aber vielleicht gibt es eine effizientere Lösung? Danke im Voraus!Gibt es noch weitere Möglichkeiten, diesen Code zu vereinfachen?

Scanner enterPrice = new Scanner(System.in); 
double budgetRemaining = 100, itemPrice; 

while (budgetRemaining > 0) { 
    System.out.println("You have a remaining budget of $" + budgetRemaining + ". Please enter price of item:"); 
    System.out.println(itemPrice = enterPrice.nextDouble()); 

    if (itemPrice < budgetRemaining) { 
     budgetRemaining -= itemPrice; 

     if (itemPrice < 0) { 
      budgetRemaining += itemPrice; 
      System.out.println("Sorry, you have entered an invalid amount. "); 
     } 
    } 
    else if (itemPrice > budgetRemaining) { 
     System.out.println("Sorry, your item exceeds your budget."); 
    } 

    if (itemPrice == budgetRemaining) { 
     budgetRemaining = 0; 
     System.out.println("You have reached your maximum budget. Thank you for shopping with us!"); 
    } 
}  
+5

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. –

+0

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. –

+0

Dies wurde gerade ersetzt. Und ich werde Code Review für die zukünftige Verwendung überprüfen, danke für den Vorschlag! –

Antwort

1

Sie könnten nur alle negativen Bedingungen prüfen Sie zuerst, es ist ein bisschen weiter zu vereinfachen.

Scanner enterPrice = new Scanner(System.in); 
    double budgetRemaining = 100, itemPrice; 
    while (budgetRemaining > 0) { 
     System.out.println("You have a remaining budget of $" + budgetRemaining + ". Please enter price of item:"); 
     System.out.println(itemPrice = enterPrice.nextDouble()); 
     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 if (itemPrice == budgetRemaining) { 
      budgetRemaining = 0; 
      System.out.println("You have reached your maximum budget. Thank you for shopping with us!"); 
     } else { 
      budgetRemaining -= itemPrice; 
     } 
    }  
} 
2

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; 
} 
+0

Ich vermutete, dass es komplizierter wurde, indem im Code verschiedene Fehlerprüfungen hinzugefügt wurden. Es ist viel einfacher, die Bedingungen am Anfang mit den 'continue'-Anweisungen hinzuzufügen. Das war genau das, was ich zu lernen hoffte. Ich schätze es sehr, dass du dir die Zeit genommen hast! Danke vielmals! –

0

Hier ist mein Code

while (budgetRemaining > 0) { 
     System.out.println("You have a remaining budget of $" + budgetRemaining + ". Please enter price of item:"); 
     itemPrice = enterPrice.nextDouble(); 

     if (itemPrice < 1){ 
      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; 
     } 
    }  
System.out.println("You have reached your maximum budget. Thank you for shopping with us!"); 

Ich überprüfe, ob die Bedingungen erfüllt sind, bevor ich den Wert des Elements aus dem Haushalt entfernen. Wenn ich weiß, dass der ItemPrice gültig ist: Ich mache einfach die Subtraktion weiter.

Wenn Sie kein Geld mehr haben, wird die While-Schleife automatisch beendet, so dass es nicht mehr erforderlich ist, den Kontostand vor dem eigentlichen Beenden zu überprüfen. Sie können die Aussage danach auch ausdrucken.

Eine andere kleine Sache, die ich getan habe, war itemPice < 1, da ich davon ausgehe, dass das Element nicht vollständig frei sein kann.

Verwandte Themen