2016-11-13 7 views
0

Ich arbeite an dieser Aufgabe für meine AP Comp Sci Klasse, in der ich ein Programm schreiben muss (mit Eclipse), das den Benutzer nach der Anzahl der gekauften Artikel fragt und ich den Code mit einer Do-While-Schleife erstellen muss . Jedes Mal muss die Schleife zu einem anderen Objekt gehören. Für jeden dieser Artikel muss der Benutzer die Kosten eingeben. Dann muss ich die Gesamtkosten aller Artikel und die Summe nach einer 9% Mehrwertsteuer drucken und das Ergebnis ausdrucken.Kodierung Do-While-Schleife?

Ich habe versucht, es zu tun, aber ich kann nicht die Summe richtig ausdrucken und es funktioniert nicht, wenn ich die for-Schleife herausnehmen. Kannst du mir ein paar Hinweise geben, wie ich es beheben kann?

public static void main(String[] args) { 
    Scanner kbReader = new Scanner(System.in); 

    System.out.println("You went shopping on Cyber Monday."); 

    do { 
     System.out.println("How many items did you purchase?"); 
     int num = kbReader.nextInt(); 
     for(int x = 0; x < num;) { 
      System.out.println("What did you purchase?"); 
      String item = kbReader.next(); 
      System.out.println("How much did it cost?"); 
      double cost = kbReader.nextDouble(); 
      break; 
     } 
     break; 
    } while(true); 

    double total = cost; 
    double totalTax = total + (total * 0.09); 
    System.out.println("Total: $" + total); 
    System.out.println("Total after tax: $" + totalTax); 
} 
+1

Willkommen bei Stack Overflow! Es sieht so aus, als müssten Sie lernen, einen Debugger zu verwenden. Bitte helfen Sie sich selbst [https: // ericlippert.com/2014/03/05/how-to-debug-kleine-programme /). Wenn Sie danach noch Probleme haben, können Sie gerne weitere Einzelheiten erfahren. –

Antwort

0

Implementierungs

Es gibt drei Fehler im Code:

  1. x++ in der for-Schleife

  2. fehlt Sie cost ouside der do-while Schleife erklären sollte und du solltest summieren (cost += kbReader.nextDouble();) Einzelartikel kostet in der for Schleife.

  3. Sie sollten die for Schleife nicht unterbrechen (wenn x die Zielnummer erreicht, wird sie automatisch unterbrochen).

Außerdem vergessen Sie nicht, Ihren Scanner nach den do-while zu schließen: kbReader.close();

Dieser Code sollte Werke:

public static void main(String[] args) { 
     Scanner kbReader = new Scanner(System.in); 

     System.out.println("You went shopping on Cyber Monday."); 
     double cost = 0; 
     do 
     { 
     System.out.println("How many items did you purchase?"); 
     int num = kbReader.nextInt(); 
     for(int x = 0; x < num;x++) 
     { 
      System.out.println("What did you purchase?"); 
      String item = kbReader.next(); 
      System.out.println("How much did it cost?"); 
      cost += kbReader.nextDouble(); 
     } 
     break; 
     }while(true); 
     kbReader.close(); 
     double total = cost; 
     double totalTax = total + (total * 0.09); 
     System.out.println("Total: $" + total); 
     System.out.println("Total after tax: $" + totalTax); 
    } 

Correct do-while Implementierung

würde ich Ich würde Ihnen gerne eine andere Implementierung vorschlagen, weil ich denke, dass Sie eineverwendensollten Sie auch die for Schleife nicht verwenden. Dies ist der Code:

Scanner kbReader = new Scanner(System.in); 
System.out.println("You went shopping on Cyber Monday."); 
double cost = 0; 
int x = 0; 
System.out.println("How many items did you purchase?"); 
int num = kbReader.nextInt(); 
do 
{ 
    System.out.println("What did you purchase?"); 
    String item = kbReader.next(); 
    System.out.println("How much did it cost?"); 
    cost += kbReader.nextDouble(); 
    x++; 
} while(x<num); 
kbReader.close(); 
double total = cost; 
double totalTax = total + (total * 0.09); 
System.out.println("Total: $" + total); 
System.out.println("Total after tax: $" + totalTax); 
0

Es gibt ein paar Probleme mit Ihrem Code. Die erste besteht darin, dass sie aus den beiden Schleifen ausbrechen wird, nachdem sie nur einmal ausgeführt wurden.

while (true) ist im Allgemeinen keine gute Idee. Ich schlage vor, dass Sie fragen, wie viele Artikel über den Do While-Schleife, und legen Sie einen Zähler auf 0 Erhöhungsschritte der Zähler um eine innerhalb der while-Schleife Körper, und dann testen Sie es in der while-Anweisung als solche:

int count = 0; 
do { 
    <code body> 
    count++; 
} while (count < num); 

Außerdem versuchen Sie, auf eine Gesamtvariable zuzugreifen, die außerhalb des Bereichs der While-Schleife lebt. Sie können nicht kompilieren. Initialisiere es oberhalb der while-Schleife und inkrementiere es (z. B. total += cost;) während der Schleife. Sie können die for-Schleife ganz loswerden.

Probieren Sie es aus!