Für meine kürzliche Aufgabe wurde ich damit beauftragt, einen Ticketautomaten zu entwickeln, der Zahlungen akzeptiert und Ihnen erlaubt, diese zu stornieren. Eine kürzliche Erweiterung der Aufgabe bestand darin, zu zählen, wieviele der hinzugefügten Pennies eine bestimmte Art von Penny waren, z. B. 10p, 20p, 50p.Anzahl der Münzen in einer "Maschine"
Ich habe es geschafft, dass das Programm genau die Anzahl von 10p innerhalb der Maschine zählt, aber ich habe ein Problem, wenn ich mit 20 versuchte.
Zum Beispiel, wenn ich das Programm im Moment führen Sie es läuft perfekt für die 10ps jedoch, wenn ich es für 20ps betreibe ich diese Ergebnisse zurück:
Test: Anzahl Münzen
ERROR: Erwartete 4 - 20p Münzen gefunden 5 - 20p Münzen
Heres der Code, wie viele 10/20/50 ps sind in der Maschine berechnet:
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 der Code für testet es:
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;
}
}
Haben Sie Ihren Code mit einem Debugger durchgegangen? Sie könnten Ihr Problem auf diese Weise leicht finden. – Msonic