Welcome to the Java Programming Forums

The professional, friendly Java community. 21,500 members and growing!

The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.

>> REGISTER NOW TO START POSTING

Thread: Count number of 'coin'p coins in a "machine"

1. 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:

```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:

```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 );

expected = 60;
res = pm.getPaidSoFar();
check( res == expected,
"Money entered into machine is %d should be %d", res, expected );
expected = 160;
res = pm.getPaidSoFar();
check( res == expected,
"Money entered into machine is %d should be %d", res, expected );

expected = 0;
pm.cancel();
res = pm.getPaidSoFar();
check( res == expected,
"money entered into machine is now %d should be 0", res );

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 );
expected = 200;
check( pm.enough(),
"Enough money entered into machine 200 for 200 ticket" );
pm.cancel();

pm.setTicketPrice( 210 );
expected = 200;
check( pm.enough(),
"Enough money entered into machine 220 for 210 ticket" );
pm.cancel();

test( "bought() & moneyInMachine()");

pm.setTicketPrice( 200 );
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 );
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.cancel();

for ( int i=1; i<=howMany; i++ )
{
}

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:

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