3

問題は、残高がマイナスになり続けることです。お金を引き出す必要がある部分を実行しますが、配置した「if」ステートメントはそれを防ぐ必要があります。私はプログラミングが初めてで、これがばかげている場合は申し訳ありません。

これが私のメインです:

public class PrinterAccount
{
    private int balance;

    public void topUp(int amount)
    { 
        balance += amount;
    }
    public int getBalance()
    { 

        return balance;
    }
    public boolean printDocument(int numPages, boolean isDoubleSided)
    {

        if (isDoubleSided)
        {
            if(numPages % 2 == 0)
            {
                int b = 0;
                b = b - ((numPages/2)*5);
                    if (balance > b)
                    {
                        balance -= ((numPages/2) * 5);
                        return true;
                    }
                    else
                    {
                        return false;
                    }
            }
            else
            {
                numPages = numPages + 1;
                int a = 0;
                a = a - ((numPages/2)*5);
                    if (balance > a)
                    {
                        balance -= ((numPages/2) * 5);
                        return true;
                    }
                    else
                    {
                        return false;
                    }
            }
        }
        else
        {
            int c = 0;
            c = c - (numPages*5);
                if (balance > c)
                {
                    balance -= (numPages*5);
                    return true;
                }
                else
                {
                    return false;
                }

        }   
    }
}

ここに私のテストがあります:

public class PrinterAccountTest
{
    public static void main(String[] args)
    {
        // Create an object of class PrinterAccount
        PrinterAccount myprinterAccount = new PrinterAccount();
        // Add 10 pounds credit (1000 pence)
        myprinterAccount.topUp(1000);

        // **************TEST 1************************
        // Print a 15-page document, single-sided, should cost 75p
        boolean res = myprinterAccount.printDocument(15, false);
        // The document should have printed successfully
        if (res)
            System.out.println("The document printed successfully");
        else
            System.out.println("The document failed to print: not enough credit.");
        // Display the remaining balance: should be 925
        System.out.println("Remaining balance is " + myprinterAccount.getBalance());

        // **************TEST 2************************
        // Print a 20-page document (even number of pages), double-sided, should cost 50p
        res = myprinterAccount.printDocument(20, true);
        // The document should have printed successfully
        if (res)
            System.out.println("The document printed successfully");
        else
            System.out.println("The document failed to print: not enough credit.");
        // Display the remaining balance: should be 875
        System.out.println("Remaining balance is " + myprinterAccount.getBalance());

        // **************TEST 3************************
        // Print a 7-page document (odd number of pages), double-sided, should cost 20p
        res = myprinterAccount.printDocument(7, true);
        // The document should have printed successfully
        if (res)
            System.out.println("The document printed successfully");
        else
            System.out.println("The document failed to print: not enough credit.");
        // Display the remaining balance: should be 855
        System.out.println("Remaining balance is " + myprinterAccount.getBalance());

        // **************TEST 4************************
        // Print a 200-page document, single-sided, should cost 1000p
        res = myprinterAccount.printDocument(200, false);
        // Should get a message saying the document failed to print
        if (res)
            System.out.println("The document printed successfully");
        else
            System.out.println("The document failed to print: not enough credit.");
        // Display the remaining balance: should be 855
        System.out.println("Remaining balance is " + myprinterAccount.getBalance());


    }
}

これは、コードを実行したときに得られる結果です。

The document printed successfully
Remaining balance is 925
The document printed successfully
Remaining balance is 875
The document printed successfully
Remaining balance is 855
The document printed successfully
Remaining balance is -145

しかし、私はそれを表示する必要があります:

The document printed successfully
Remaining balance is 925
The document printed successfully
Remaining balance is 875
The document printed successfully
Remaining balance is 855
The document failed to print: not enough credit.
Remaining balance is 855
4

2 に答える 2

5

print document メソッドの次の行:

    int c = 0;
    c = c - (numPages*5);
    if (balance > c) ...

変数 c は常に負の値になります。減算する代わりに (numPages*5) を加算したかったと思います。

于 2012-12-03T16:00:45.137 に答える
4

cが負になり、バランスが正になるため、あなたbalanceは常にa、b、cよりも大きくなり、値 balance>cは常に真になります。ロジックを変更してみる

于 2012-12-03T16:00:35.843 に答える