2016-11-20 3 views
-5

Ich habe erst ein paar Wochen Java gelernt, also Entschuldigung für die absolute Leichtigkeit viele von Ihnen werden dieses Problem lösen. Es hat mein Gehirn durcheinander gebracht.Basic Java Übung - Hilfe benötigt

Hier sind die Anweisungen „Online Book Depot bietet Premium-Kunden 1 kostenloses Buch mit jedem Kauf von 5 oder mehr Büchern und bietet 2 kostenlose Bücher bei jedem Einkauf von 8 oder mehr Büchern. Es Stammkunden 1 kostenloses Buch bietet mit Jeder Kauf von 7 oder mehr Büchern und bietet 2 kostenlose Bücher bei jedem Kauf von 12 oder mehr Bücher. Schreiben Sie den Code, der freeBooks den entsprechenden Wert auf der Basis der Werte der booleschen Variablen isPremiumCustomer und der int-Variablen nbooksPurchased "

Der Code kompiliert ohne Fehler, aber die Ergebnisse sind falsch ... Hilfe!

boolean isPremiumCustomer = false; 
    int freeBooks = 0; 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Enter the no of books:"); 
    int nbooksPurchased = scanner.nextInt(); 
    System.out.println("is Premium customer?(y/n):"); 
    String ans = scanner.next(); 
    if (ans.equals("y") || ans.equals("Y") && (nbooksPurchased >4 && (nbooksPurchased <8))) { 
     isPremiumCustomer = true; 
     freeBooks = 1; 
    }else if (ans.equals("y") || ans.equals("Y") && (nbooksPurchased >=8)) { 
     isPremiumCustomer = true; 
     freeBooks = 2; 
    }else if (ans.equals("n") || ans.equals("N") && (nbooksPurchased >=7 && (nbooksPurchased <=11))) { 
     freeBooks = 1; 
    }else if (ans.equals("n") || ans.equals("N") && (nbooksPurchased >=12)){ 
     freeBooks = 2; 
     } 
     System.out.println("Free Books:" + freeBooks); 
+0

Define * "Ergebnisse sind falsch" *. Was sind die Eingänge und (falsche) Ausgänge. Auch sollten Sie zuerst versuchen, es mit einem Debugger zu durchlaufen. Schließlich würde ich Ihnen empfehlen zu versuchen, den Fluss ein wenig zu ändern - isolieren Sie die Überprüfung der Eingabe von der Überprüfung von 'nbooksPurchased' – UnholySheep

+1

Haben Sie versucht, Ihren Code zu debuggen, um zu sehen, wo die Dinge anders als erwartet verlaufen? – n247s

+1

Was ist das Ergebnis, das Sie erwartet haben? und was ist das Ergebnis, das du bekommst? –

Antwort

1

Wenn Sie versuchen, Ihren eigenen Code in den Kommentar zu lesen, verstehe ich Ihre Frustration. ;-) Das ist kaum möglich. Sie können Ihre Frage bearbeiten und dort neuen formatierten Code eingeben. Wenn ich es formatiere, bekomme ich:

if (ans.equals("y") || ans.equals("Y")) { 
     isPremiumCustomer = true; 
    } 
    if (nbooksPurchased >= 3 && (nbooksPurchased <= 7)) { 
     freeBooks = 1; 
    } else if (nbooksPurchased >= 8) { 
     freeBooks = 2; 
    } 
    if (ans.equals("n") || ans.equals("N")) { 
     if ((nbooksPurchased >= 7 && (nbooksPurchased <= 11))) { 
      freeBooks = 1; 
     } else if (nbooksPurchased >= 12) { 
      freeBooks = 2; 
     } 
    } 

Jetzt sind Sie eindeutig auf dem Weg! Das Hauptproblem dabei ist, dass das mittlere if-else-Konstrukt if (nbooksPurchased >= 3 && (nbooksPurchased <= 7)) { für alle Kunden, nicht nur für Premium-Kunden, ausgeführt wird. So erhalten Stammkunden, die 3 oder 6 Bücher kaufen, das 1 kostenlose Buch, das nur Premium-Kunden bei einem solchen Kauf hätten haben sollen. Wenn sie 7 oder mehr kaufen, wird die Ausführung in if (ans.equals("n") || ans.equals("N")) {, und Sie werden gespeichert.

Das andere Problem ist nur ein Tippfehler, nbooksPurchased >= 3 sollte 5 für Premium-Kunden gewesen sein.

So glaube ich, dass die meisten Fälle richtig funktionieren.

denke ich, dass dies wäre klarer (und damit leichter für sich selbst Fehler in korrigieren):

if (isPremiumCustomer) { 
     // put if-else for premium customers here 
    } else { 
     // put if-else for regular customers here 
    } 

Auch ich denke, das wird besser, die Anforderung erfüllen:

Schreiben Sie den Block Code, der den entsprechenden Wert freeBooks basierend auf die Werte der booleschen Variable isPremiumCustomer und ...

zuweist

(meine Betonung). Ich hoffe, du wirst es erfolgreich schaffen.