# Count number of 'coin'p coins in a "machine"

• March 20th, 2012, 04:34 PM
BITmixit
Count number of 'coin'p coins in a "machine"
[SOLVED]

Hello for my recent assignment I've been tasked to create a ticket machine which accepts payments in and allows you to cancel them. A recent extension to the assignment was to count how many of the pennies being added were a certain type of penny, e.g 10p, 20p, 50p.

I managed to get the program to accurately count the number of 10p within the machine but when I tried with 20's I came to a dead end.

Heres the code that calculates how many 10/20/50ps are in the machine:

Code :

```class ProcessMoney { int ticket; int cost = 0; int machine; int pence = 0; int calc = 0;   public void setTicketPrice( int amount ) {   ticket = amount;   }   public int getTicketPrice() {   return ticket;   }     public void add( int coin ) {   cost = cost + coin;   if ( coin == 10 ){ calc = calc + 1; }     }   public boolean enough() { return true; }   public int getPaidSoFar() { return cost; }   public void cancel() {   cost = 0;   }   public void bought() {   machine = machine + cost; cost = 0;   }   public int moneyInMachine() {   return machine;   }   public int getCoins( int coin ) {   if ( coin == 10 ){ pence = machine * 100; calc = pence / 1000; } else if ( coin == 20 ){ pence = machine * 100; calc = pence / 2000; }   return calc; } }```

Heres the code for testing it:

Code :

```class Main { private static ProcessMoney pm = new ProcessMoney();   public static void main( String args[] ) { int res = 0, expected = 100;   test( "setTicketPrice() & getTicketPrice() ");   pm.setTicketPrice( expected ); res = pm.getTicketPrice(); check( res == expected, "Ticket price is %d should be %d", res, expected );   expected = 200; pm.setTicketPrice( expected ); res = pm.getTicketPrice(); check( res == expected, "Ticket price is %d should be %d", res, expected );   test( "add() & getPaidSoFar()");   pm.add( 10 ); pm.add( 20 ); pm.add( 30 ); expected = 60; res = pm.getPaidSoFar(); check( res == expected, "Money entered into machine is %d should be %d", res, expected ); pm.add( 20 ); pm.add( 40 ); pm.add( 40 ); expected = 160; res = pm.getPaidSoFar(); check( res == expected, "Money entered into machine is %d should be %d", res, expected );   test( "add() & cancel()");   pm.add( 10 ); pm.add( 20 ); pm.add( 30 ); expected = 0; pm.cancel(); res = pm.getPaidSoFar(); check( res == expected, "money entered into machine is now %d should be 0", res );   pm.add( 100 ); pm.add( 200 ); pm.add( 300 ); expected = 0; pm.cancel(); res = pm.getPaidSoFar(); check( res == expected, "money entered into machine is now %d should be 0", res );   test( "enough()");   pm.setTicketPrice( 200 ); pm.add( 100 ); pm.add( 100 ); pm.add( 0 ); expected = 200; check( pm.enough(), "Enough money entered into machine 200 for 200 ticket" ); pm.cancel();   pm.setTicketPrice( 210 ); pm.add( 100 ); pm.add( 100 ); pm.add( 20 ); expected = 200; check( pm.enough(), "Enough money entered into machine 220 for 210 ticket" ); pm.cancel();   test( "bought() & moneyInMachine()");   pm.setTicketPrice( 200 ); pm.add( 100 ); pm.add( 100 ); pm.add( 0 ); if ( pm.enough() ) { pm.bought(); }   expected = 200; res = pm.moneyInMachine(); check( expected == res, "Total money in machine %d should be %d", res, expected ); res = pm.getPaidSoFar(); check( res == 0, "Money for ticket in machine is %d should be 0", res ); pm.cancel();     pm.setTicketPrice( 200 ); pm.add( 100 ); pm.add( 100 ); pm.add( 10 ); if ( pm.enough() ) { pm.bought(); }   expected = 410; res = pm.moneyInMachine(); check( expected == res, "Total money in machine %d should be %d", res, expected ); res = pm.getPaidSoFar(); check( res == 0, "Money for ticket in machine is %d should be 0", res );   test("Count coins"); pm = new ProcessMoney(); checkRecord( 10, 2 ); checkRecord( 20, 4 ); checkRecord( 50, 3 ); checkRecord( 100, 3 ); checkRecord( 200, 2 );   System.out.println( "Success" ); }   private static void checkRecord( int coin, int howMany ) { pm.setTicketPrice( howMany * coin );   for ( int i=1; i<=howMany*2; i++ ) { pm.add( coin ); } pm.cancel();   for ( int i=1; i<=howMany; i++ ) { pm.add( coin ); }   pm.bought(); int actual = pm.getCoins( coin ); check( howMany == actual, "Expected %d - %dp coins found %d - %dp coins", howMany, coin, actual, coin ); }   private static String what = "";   public static void check( boolean ok, String fmt, Object... params ) { if ( ! ok ) { System.out.println( what ); System.out.print("ERROR: " ); System.out.printf( fmt, params ); System.out.println(); System.exit(-1); } }   public static void test( String str ) { what = "Test: " + str; }   }```

For example when I run the program at the moment it runs perfectly for the 10ps however when I run it for 20ps I get these results back:

Quote:

Test: Count coins
ERROR: Expected 4 - 20p coins found 5 - 20p coins