'Exact Change with Java

I am struggling with a homework assignment for a Java class. My code is listed below.
I am having a problem with my dollars and quarters and outputting correctly, I am not sure what the mistake is, with the quarters or dollars? For example, I am getting the error from my lab -

" Output differs. See highlights below.
Input: 141
Your output
1 Dollar 1 Dime 1 Nickel 1 Penny
Expected output
1 Dollar 1 Quarter 1 Dime 1 Nickel 1 Penny "

Input: 45
Your output
2 Dimes
Expected output
1 Quarter 2 Dimes

The prompt is as follows;

Write a program with total change amount in pennies as an integer input, and output the change using the fewest coins, one coin type per line. The coin types are Dollars, Quarters, Dimes, Nickels, and Pennies. Use singular and plural coin names as appropriate, like 1 Penny vs. 2 Pennies.
Ex: If the input is: 0
the output is:
No change
Ex: If the input is: 45 the output is:
1 Quarter
2 Dimes

import java.util.Scanner; 

public class LabProgram {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      
    int cents = scnr.nextInt();

    int numDollars = (cents / 100) % 100;
    int numQuarters = (cents % 25) / 25;
    int numDimes    = (cents % 25) / 10;
    int numNickels  = ((cents % 25) % 10) / 5;
    int numPennies  = ((cents % 25) % 10) % 5;

// no change
      if (cents == 0) {
         System.out.println("No change");
      }
      
// dollars
      if (numDollars < 2 && numDollars >=1) {
      System.out.println(numDollars + " Dollar");
      }
      
      else if (numDollars >=2) {
      System.out.println(numDollars + " Dollars");
      }

// quarters
      if (numQuarters < 2 && numQuarters >=1) {
      System.out.println(numQuarters + " Quarter");
      }
      
      else if (numQuarters >=2) {
      System.out.println(numQuarters + " Quarters");
      }
      
// dimes      
      if (numDimes < 2 && numDimes >=1) {
      System.out.println(numDimes + " Dime");
      }
      
      else if (numDimes >=2) {
      System.out.println(numDimes + " Dimes");
      }
      
// nickels      
      if (numNickels < 2 && numNickels >=1) {
      System.out.println(numNickels + " Nickel");
      }
      
      else if (numNickels >=2) {
      System.out.println(numNickels + " Nickels");
      }

// pennies      
      if (numPennies < 2 && numPennies >=1) {
      System.out.println(numPennies + " Penny");
      }
      
      else if (numPennies >=2) {
      System.out.println(numPennies + " Pennies");
      }
      
      
   }
}


Solution 1:[1]

Your mistake is trying overly complicated formulas to calculate the coin amounts.

Just do what you would do in the real world: grab full dollars until that's no longer possible. See how much is left. Grab quarters until that's no longer possible. See how much is left. And so on.

Solution 2:[2]

So in defining int's I would change the logic of your formula after the dollar, and first lines for singular use should be == not >= but I would suggest this code:

import java.util.Scanner; 

public class LabProgram {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      
      int cents = scnr.nextInt();

      int numDollars = (cents / 100) % 100;
      int numQuarters = (cents / 25) % 25;
      int numDimes    = (cents / 10) % 10;
      int numNickels  = ((cents / 5) % 5);
      int numPennies  = ((cents / 1) % 1);

      // no change
      if (cents == 0) {
         System.out.println("No change");
      }
      
      // dollars
      if (numDollars < 2 && numDollars == 1) {
         System.out.println(numDollars + " Dollar");
      }
      
      else if (numDollars >= 2) {
          System.out.println(numDollars + " Dollars");
      }
      
      // quarters
      if (numQuarters < 2 && numQuarters == 1) {
          System.out.println(numQuarters + " Quarter");
      }
      
      else if (numQuarters >= 2) {
          System.out.println(numQuarters + " Quarters");
      }
      
      // dimes      
      if (numDimes < 2 && numDimes == 1) {
          System.out.println(numDimes + " Dime");
      }
      
      else if (numDimes >= 2) {
          System.out.println(numDimes + " Dimes");
      }
      
      // nickels      
      if (numNickels < 2 && numNickels == 1) {
          System.out.println(numNickels + " Nickel");
      }
      
      else if (numNickels >= 2) {
          System.out.println(numNickels + " Nickels");
      }
      
      // pennies      
      if (numPennies < 2 && numPennies == 1) {
          System.out.println(numPennies + " Penny");
      }
      
      else if (numPennies >= 2) {
          System.out.println(numPennies + " Pennies");
      }
      
      
   }
}

Solution 3:[3]

So in defining int's I would change the logic of your formula after the dollar, and first lines for singular use should be == not >= but I would suggest this code:

import java.util.Scanner; 

public class LabProgram {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      
      int cents = scnr.nextInt();

      int numDollars = (cents / 100) % 100;
      int numQuarters = (cents % 100) / 25;
      int numDimes    = (cents % 25) / 10;
      int numNickels  = (((cents % 25) % 10) / 5);
      int numPennies  = (((cents % 25) % 10) % 5);

      // no change
      if (cents == 0) {
         System.out.println("No change");
      }
      
      // dollars
      if (numDollars < 2 && numDollars == 1) {
         System.out.println(numDollars + " Dollar");
      }
      
      else if (numDollars >= 2) {
          System.out.println(numDollars + " Dollars");
      }
      
      // quarters
      if (numQuarters < 2 && numQuarters == 1) {
          System.out.println(numQuarters + " Quarter");
      }
      
      else if (numQuarters >= 2) {
          System.out.println(numQuarters + " Quarters");
      }
      
      // dimes      
      if (numDimes < 2 && numDimes == 1) {
          System.out.println(numDimes + " Dime");
      }
      
      else if (numDimes >= 2) {
          System.out.println(numDimes + " Dimes");
      }
      
      // nickels      
      if (numNickels < 2 && numNickels == 1) {
          System.out.println(numNickels + " Nickel");
      }
      
      else if (numNickels >= 2) {
          System.out.println(numNickels + " Nickels");
      }
      
      // pennies      
      if (numPennies < 2 && numPennies == 1) {
          System.out.println(numPennies + " Penny");
      }
      
      else if (numPennies >= 2) {
          System.out.println(numPennies + " Pennies");
      }
      
      
   }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sebastian Redl
Solution 2 Aly Mos
Solution 3 Aly Mos