私の最近の任務では、支払いを受け取り、取り消すことを可能にするチケット機を作成する任務がありました。最近の割り当ての拡張は、追加されるペニーの数が特定の種類のペニー(たとえば10p、20p、50p)であるかをカウントすることでした。「機械」内のコイン型コインの枚数
マシン内の10pの数を正確にカウントするプログラムを手に入れましたが、20秒で試してみると問題があります。
テスト:私は、現時点では、プログラムを実行する例えば
は、それは私がは20psのためにそれを実行したときに、私は戻って、これらの結果を得るしかし10PSのために完璧に動作しますカウントコイン
ERROR:4期待します -
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にコード用の10/20/50PSが機械内にあるどのように多くの計算
相続コード20Pコイン - 20Pコイン5見出さテストしてください:
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;
}
}
デバッガでコードを実行しましたか?あなたは簡単にあなたの問題を見つけることができます。 – Msonic