Doomboy911
Doomboy911

Reputation: 41

Vending machine program java

In this vending machine code of mine, if I input excess funds it doesn't give me the change back. What am I missing here?

public static void main(String[] args) {
    int Food = runMenu();
    int Price = retrievePrice(Food);
    int change = moneyInserted(Price);
}

public static int runMenu(){
    Scanner keyboard = new Scanner(System.in);
    int choice = 0 ;
    System.out.println("\n\nPlease enter your selection:"
                + "\n1: Snickers \t 125"
                + "\n2: Reeses Cup \t 130"
                + "\n3: Doritoes \t 150"
                + "\n4: Pepsi \t 185"
                + "\n5: Exit ");
    choice = keyboard.nextInt();
    return choice;        
}

public static int retrievePrice(int menuChoice){
    if (menuChoice == 1)
        return 125;
    if (menuChoice == 2)
        return 130;
    if (menuChoice == 3)
        return 150;
    if (menuChoice == 4)
        return 185;
    else return 0;
}

public static int moneyInserted(int Price){
    Scanner keyboard = new Scanner(System.in);
    int money = 0;
    System.out.println("Your item costs: " + Price + " Please enter the amount of money:");
    money = keyboard.nextInt();
    while (money < Price){
        System.out.println("Please insert sufficient funds");
        money = money + keyboard.nextInt();
    }
    return money - Price ;
}

public static void changeOut(int change){
    int quarters = 0;
    int dimes = 0;
    int nickels = 0;
    while (change >= 25){
        quarters = quarters + 1;
        change = change - 25;
    }
    while (change >= 10){
        nickels = dimes + 1;
        change = change - 10;
        while (change >= 5){
            nickels = nickels + 1;
            change = change - 5;
        }
    }
}

Upvotes: 4

Views: 28481

Answers (2)

Pratik Sherdiwala
Pratik Sherdiwala

Reputation: 1

private static int totalNotes = 0;
private static int amount = 0;

private static void printAmount(int maxAmt) {
    amount = amount - maxAmt;
    totalNotes++;
    System.out.print(maxAmt + "-");
}

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter Amount");
    amount = scanner.nextInt();
    int maxAmt = 0;

    while (amount != 0) {
        if (amount >= 2000) {
            maxAmt = 2000;
        } else if (amount >= 500) {
            maxAmt = 500;
        } else if (amount >= 200) {
            maxAmt = 200;
        } else if (amount >= 100) {
            maxAmt = 100;
        } else if (amount >= 50) {
            maxAmt = 50;
        } else if (amount >= 20) {
            maxAmt = 20;
        }
        // as same you can do this for
        /*10, 5, 2, 1*/
        printAmount(maxAmt);
    }
    System.out.println("\nTotal notes : " + totalNotes);
}

Upvotes: 0

Sнаđошƒаӽ
Sнаđошƒаӽ

Reputation: 17612

Your code does return the change, you are just not using it.

Modify your code like this:

  1. After you calculate the change, pass it to your changeOut() method which is doing the change calculation in your code. To do that, add this line to the end of the main() method:

    changeOut(change);
    

2.There is slight logical mistake in your changeOut() method. Modify it like this:

public static void changeOut(int change){
    int quarters = 0;
    int dimes = 0;
    int nickels = 0;
    while (change >= 25){
        quarters = quarters + 1;
        change = change - 25;
    }
    while (change >= 10){
        dimes = dimes + 1;
        change = change - 10;
    }
    while (change >= 5){
        nickels = nickels + 1;
        change = change - 5;
    }

    // to see the change, print it to the console perhaps
    System.out.printf("\nHere's your change:\n%d quarters, %d dimes, %d nickels and %d pennies!",
        quarters, dimes, nickels, change);
}

Upvotes: 2

Related Questions