2016-04-05 21 views
0

Ich versuche, die Mindestanzahl an Münzen (Vierteln, Groschen, Nickel und Pennies) zu erhalten, die erforderlich sind, um einen bestimmten Betrag der Änderung (1-99) zu erfüllen. Beispiel:Änderung der Anzahl der Münzen

Change: 93 

Quarters: 3 

Dimes: 1 

Nickels: 1 

Pennies: 3 

Wenn ich mein Programm ausführen, bekomme ich nicht die Antworten, die ich sollte. Meine Frage ist, wie mache ich die Ausgabe in meinem Programm wie die obige Lösung aussehen? Ändere ich die Gleichungen innerhalb des Programms, um die gewünschten Zahlen zu erhalten? Der einzige Teil des Programms, den ich habe, ist die Anzahl der Quartiere, die benötigt werden, um den angegebenen Betrag zu erreichen. Dieses Programm muss auch für jede angegebene Menge Arbeit zwischen 1 und 99

Hier ist, was ich bisher:

package mincoins; 
import java.util.Scanner; 

public class MinCoins2 
{ 

    public static void main(String[] args) 

    { 
     int change = 0; 
     int quarters = 0; 
     int dimes = 0; 
     int nickels = 0; 
     int pennies = 0; 
     try (//creates a copy of Scanner class 
       Scanner in = new Scanner(System.in)) 
     { 
      System.out.println("Please enter amount of change(1-99)"); 

      change = in.nextInt(); 

      //loop for quarters 
      while (change >= 25) 
      { 
       change = change - 25; 
       quarters = quarters + 1; 
      } 
      while (change >= 10) 
      { 
       change = change - 10; 
       dimes = dimes + 1; 
      } 
      while (change >= 5) 
      { 
       change = change - 5; 
       nickels = nickels + 1; 
      } 
      pennies = change; 
      System.out.println("Change: " + change); 
      System.out.println("Quarters = " + change); 
      System.out.println("Dimes = " + change); 
      System.out.println("Nickels = " + change); 
      System.out.println("Pennies = " + change); 
     } 
    }//end of main 
}//end of class 
+0

Sie sollten 0 Veränderung haben. Es ist kein mathematisches Problem, es ist ein logisches Problem. –

+0

In den letzten 5 Zeilen drucken Sie immer 'change' statt' viertel', 'dimes',' nickels' und 'pennies'! –

+0

Egal was ich mache, es gibt mir immer noch nicht was ich will. –

Antwort

1

Sie haben Fehler auf den letzten 4 Zeilen:

System.out.println("Change:" + change); 
System.out.println("Quarters= "+ change); 
System.out.println("Dimes=" + change); 
System.out.println("Nickels=" + change); 
System.out.println("Pennies=" + change); 

Sind Alle Drucken

Auch die While-Loop-Bedingungen sollten >= statt > sein.

Zuletzt, um die Änderung am Ende auszudrucken, müssen Sie sie kopieren, da Sie sie in Ihren while-Schleifen ändern.

change = in.nextInt(); 
int changeOut = change; 
... 
System.out.println("Change:" + changeOut); 

Live Demo

+0

Also, was soll ich statt ändern, um die Ausgabe gleich der Lösung zu machen? –

+0

Nun ... '' 'viertel' '' '' 'Groschen' '' '' '' nickels''', '' '' 'Pennies' '' für die letzten 4. –

+0

Ich habe es geändert, aber ich bekomme immer noch das gleiche Ergebnis: System.out.println ("Change =" + change); System.out.println ("Viertel =" + Viertel); System.out.println ("Dimes =" + Groschen); System.out.println ("Nickels =" + Nickel); System.out.println ("Pennies =" + Pennies); –

0

Das Hauptproblem ist die Variablen Sie verwenden. Sie sollten Ihre quarters, dimes, nickels und pennies Variablen an den entsprechenden Stellen verwenden.

Es gibt einen weiteren logischen Fehler - Sie müssen alle übrig gebliebenen Änderungen ausschöpfen, um Ihre Pennys zu zählen. Da die Ausgabe (die Sie tatsächlich benötigen) nicht, dass Sie die Änderung übrig (da es sollte 0 sein) zählt das Mandat, können Sie eine weitere Schleife ganz vermeiden und nur direkt zuweisen pennies-change:

pennies = change; 

... und dies wird Ihnen das richtige Ergebnis für die Gesamtzahl der übrig gebliebenen Pennies geben.

Als einige allgemeine Bereinigung, Sie möchten auch vermeiden, in der print-Anweisung zuweisen, wie es ein wenig verwirrend sein kann. Verwenden Sie stattdessen Anweisungen wie change -= 25 unabhängig von System.out.println.

+0

Es funktioniert immer noch nicht, egal was ich hineinlege. –

+0

@LilyPeterson: Ich bin ziemlich zuversichtlich, dass es tut; Ich habe den Code mit den oben beschriebenen Änderungen ausgeführt und erhalte die genaue Ausgabe, nach der Sie suchen. Wenn Sie immer noch in Schwierigkeiten geraten, sollten Sie Ihrer Frage ein * signifikantes Detail * hinzufügen, damit wir Sie führen können. – Makoto

1

Offensichtlich ist der Tippfehler das Problem muss, sein:

System.out.println("Quarters = " + quarters); 
System.out.println("Dimes = " + dimes); 
System.out.println("Nickels = " + nickles); 
System.out.println("Pennies = " + change); 

Aber ich einen Vorschlag machen wollen, wie dieser Code funktioniert w.r.t. zu den Schleifen, z.B .:

//loop for quarters 
while (change > 25) { 
    change = change - 25; 
    quarters = quarters + 1; 
} 

dies leicht ohne Schleife erfolgt:

quarters = change/25; 
change = change - quarters * 25; 

int s Dies liegt daran, change und 25 sind, so dass eine ganzzahlige Division tun / wird. Es wird die größte Anzahl von Vierteln ergeben, die in die Veränderung passen, d. H. Es wird abgerundet.

Einen Schritt weiter gehen können Sie auch den % Modulo-Operator verwenden, um die verbleibende Änderung bei jedem Schritt zu erhalten:

quarters = change/25; 
change = change % 25; 

dimes = change/10; 
change = change % 10; 

nickels = change/5; 
change = change % 5; 
+0

Funktioniert immer noch nicht. Außerdem muss dieses Programm für ALLE Eingaben zwischen 1 und 99 funktionieren. –

+0

OK. Sie müssen den Tippfehler korrigieren, wo Sie immer wieder "Wechsel" drucken. Wie in anderen Antworten beschrieben, aber ich habe das jetzt ausdrücklich in meiner Antwort erwähnt. – weston

+0

Überprüfen Sie auch, ob der eingegebene Wert korrekt mit 'System.out.println (" Ändern: "+ ändern) gelesen wird;' direkt nach 'change = in.nextInt();' – weston

Verwandte Themen