Calculatrice de Changement de Distributeur Automatique


Je veux décomposer l'entier entré en pièces de différentes tailles: quarts (25), dimes (10), nickels (5) et pennies (1). Mais je ne sais pas quoi faire pour les nickels et les pennies.

Par exemple, l'entrée de 87 devrait sortir:

3 trimestres, 1 centime, 0 nickels, 2 centimes

Mais je reçois:

3 quarts, 1 centime, 1 nickel, 1 penny.

Je veux vérifier si c'est une entrée valide, si non, je veux dire à l'utilisateur de entrez - le à nouveau jusqu'à ce qu'il obtienne l'entrée valide.
Deuxièmement, si elle donne l'entrée en vigueur, je le veux pour exécuter le programme, encore et encore, mais une fois qu'il donne une entrée non valide, je veux que le programme demande à l'utilisateur d'entrer une entrée valide.
J'ai réussi à en faire la majeure partie, mais j'ai du mal à comprendre comment faire en sorte que l'utilisateur prenne une autre entrée encore et encore. Mon code s'arrête juste après la deuxième manche.
S'il vous plaît aider.

Ci-dessous est mon code:

public class VendingMachineChangeCalculator {
    public static void main(String[] args) {    
        Scanner takeit = new Scanner(System.in);
        System.out.println("Enter a whole number from 1 to 99"
            + "\nI will find a combination of coins that equals"
            +"the amount of change ");
        int money = 0;
        System.out.println("Please enter number: ");
        money = takeit.nextInt();

    if(money>0 && money<=99) {
        System.out.println("You have: ");

        int quarter, dime, nickel, penny;

        quarter = money/25;
        money = money %25;

        dime = money/10;
        money = money %10;

        nickel = money/5;
        money = money%5;
        penny = money;

        System.out.println(quarter + " quarters");
        System.out.println(dime + " dimes");
        System.out.println(nickel + " nickles");
        System.out.println(penny + " pennies");

        System.out.print("Good job, enter a new valid integer: ");
        money = takeit.nextInt();                       
}
 else  {System.out.print("Invalid entry, please try again: ");
 money = takeit.nextInt();
 } 
    takeit.close();
    }
 }
Author: onedimensional_noob, 2018-03-08

3 answers

La logique de votre code est fausse, mais vous avez la bonne idée.

La première question que votre code devrait faire pour le diviser en pièces est:


Combien de trimestres puis-je intégrer dans "l'argent"

quarter = money/25

Cette partie est correcte.


Mais après avoir calculé le montant des trimestres, vous devez le soustraire du montant total de l'argent, puis passer à la pièce suivante.

Combien de sous puis-je tenir dans CE QUI RESTE de de l'argent?

money = money - quarter*25
dimes = money/10

La même logique s'applique pour les autres pièces:

money = money - dime*10
nickel = money/5

Et ainsi de suite:

money = money - nickel*5
penny = money

Il s'agit d'une approche simple et approfondie de ce problème, qui pourrait être simplifiée. Donc, code complet:

public class VendingMachineChangeCalculator {

public static void main(String[] args) {    
    // TODO Auto-generated method stub    
Scanner takeit = new Scanner(System.in);
System.out.println("Enter a whole number from 1 to 99"
    + "\nI will find a combination of coins that equals"
    +"the amount of change ");
int money = 0;
System.out.println("Please enter number: ");
money = takeit.nextInt();
takeit.close();
System.out.println("You have: ");
int quarter, dime, nickel, penny;

quarter = money/25
money = money - quarter*25;
dime = money/10;
money = money - dime*10;
nickel = money/5;
money = money - nickel*5;
penny = money;

System.out.println(quarter + " quarters");
System.out.println(dime + " dimes");
System.out.println(nickel + " nickels");
System.out.println(penny + " pennies");


    }

}
 0
Author: Tengu, 2018-03-08 19:16:02

Le nickel et les sous doivent être calculés différemment. Essayez ceci

nickel = ((money%25)%10)/5;
penny = ((money%25)%10)%5;
 0
Author: Echtniet, 2018-03-08 19:06:22

Voici comment obtenir la bonne quantité de pièces de

change = 87;

Fondamentalement, tout ce dont vous avez besoin est de compter combien de pièces vous obtiendrez et n'oubliez pas de compter les restes.

quarters           = Math.floor(change / 25);
quarters_leftover  = change % 25;

dimes              = Math.floor(quarters_leftover / 10);
dimes_leftover     = quarters_leftover % 10;

nickels            = Math.floor(dimes_leftover / 5);
nickels_leftover   = dimes_leftover % 5;

penies   = Math.floor(nickels_leftover / 1);

Désolé de mal expliquer, mon anglais n'est pas assez bon, donc je ne peux pas expliquer le détail pour vous.

Modifié:

Si vous voulez une rentrée, vous devez la mettre en boucle. Donc, au lieu d'utiliser if, vous devez le changer en while, donc il bouclera si la condition est remplie

while(money > 0 && money <= 99) {
    System.out.println("You have: ");

    int quarter, dime, nickel, penny;

    quarter = money/25;
    money = money %25;

    dime = money/10;
    money = money %10;

    nickel = money/5;
    money = money%5;
    penny = money;

    System.out.println(quarter + " quarters");
    System.out.println(dime + " dimes");
    System.out.println(nickel + " nickles");
    System.out.println(penny + " pennies");

    System.out.print("Good job, enter a new valid integer: ");
    money = takeit.nextInt();                       
}
 0
Author: Khrisna Gunanasurya, 2018-03-09 06:32:39