'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 |