Java 把硬币换成零钱

Java 把硬币换成零钱,java,Java,我目前正开始学习Java,并正在编写代码来改变现状。我已经完成了,但我遇到的一个小问题是,当我输入1p或超过501p时,它将显示正确的消息,但仍在消息下方执行计算 如果能指出任何其他问题,我也将不胜感激:) 我的代码是: class Main { public static void main( String args[] ) { System.out.print("#Please enter the amount of change : "); int change = B

我目前正开始学习Java,并正在编写代码来改变现状。我已经完成了,但我遇到的一个小问题是,当我输入1p或超过501p时,它将显示正确的消息,但仍在消息下方执行计算

如果能指出任何其他问题,我也将不胜感激:)

我的代码是:

class Main { 
public static void main( String args[] ) {

    System.out.print("#Please enter the amount of change : ");
    int change = BIO.getInt();

    while(change > 0)
    {
        int twopounds, pounds, fifty, twenty, ten, five, two, one;

        twopounds = change / 200;
        int left = change % 200;

        pounds = left / 100;
        left = left % 100;

        fifty = left / 50;
        left = left % 50;

        twenty = left / 20;
        left = left % 20;

        ten = left / 10;
        left = left % 10;

        five = left / 5;
        left = left % 5;

        two = left / 2;
        left = left % 2;

        one = left / 1;

        int nbCoins = twopounds + pounds + fifty + twenty + ten + five + two + one;

        if (change == 1)
        {
            System.out.print("1 coin" + "\n");
        }

        if (change > 500)
        { 
            System.out.print("Invalid amount " + change + "p" + "\n");
        }

        if (change <= 500 && change > 1)

            System.out.print(change + "p " + nbCoins +" coins ");

        {

            if ( twopounds > 0 )
            {
                System.out.print( twopounds > 1 ? twopounds + "*200p " : "200p " );
            }

            if ( pounds > 0 )
            {
                System.out.print( pounds > 1 ? pounds + "*100p " : "100p " );
            }

            if ( fifty > 0 )
            {
                System.out.print( fifty > 1 ? fifty + "*50p " : "50p " );
            }

            if ( twenty > 0 )
            {
                System.out.print( twenty > 1 ? twenty + "*20p " : "20p " );
            }

            if ( ten > 0 )
            {
                System.out.print( ten > 1 ? ten + "*10p " : "10p " );
            }

            if ( five > 0 )
            {
                System.out.print( five > 1 ? five + "*5p " : "5p " );
            }

            if ( two > 0 )
            {
                System.out.print( two > 1 ? two + "*2p " : "2p " );
            }

            if ( one > 0 )
            {
                System.out.print( one > 1 ? one + "*1p " : "1p " );
            }

            System.out.print("\n");
        }
        System.out.print("#Please enter the amount of change : ");
        change = BIO.getInt();
    }

}
}
类主{
公共静态void main(字符串参数[]){
系统输出打印(“#请输入更改金额:”);
int change=BIO.getInt();
而(更改>0)
{
两磅,五十磅,二十磅,十磅,五磅,二磅,一磅;
两磅=零钱/200;
int left=更改%200;
磅=左/100;
左=左%100;
五十=左/50;
左=左%50;
二十=左/20;
左=左%20;
十=左/10;
左=左%10;
五=左/5;
左=左%5;
2=左/2;
左=左%2;
1=左/1;
int nbCoins=两磅+磅+五十+二十+十+五+二+一;
如果(更改==1)
{
系统输出打印(“1枚硬币”+“\n”);
}
如果(更改>500)
{ 
系统输出打印(“无效金额”+更改+“p”+“\n”);
}
如果(更改1)
系统输出打印(更改+“p”+nbCoins+“硬币”);
{
如果(两磅>0)
{
系统输出打印(两磅>1?两磅+“*200p”:“200p”);
}
如果(磅>0)
{
系统输出打印(磅>1?磅+“*100p”:“100p”);
}
如果(50>0)
{
系统输出打印(五十个>1?五十个+“*50p”:“50p”);
}
如果(二十个>0)
{
系统输出打印(二十个>一个?二十个+“*20p”:“20p”);
}
如果(十个>0)
{
系统输出打印(十个>1?十个+“*10p”:“10p”);
}
如果(五个>0)
{
系统输出打印(五个>1?五个+“*5p”:“5p”);
}
如果(两个>0)
{
系统输出打印(两个>1?两个+“*2p”:“2p”);
}
如果(一个>0)
{
系统输出打印(一个>1?一个+“*1p”:“1p”);
}
系统输出打印(“\n”);
}
系统输出打印(“#请输入更改金额:”);
change=BIO.getInt();
}
}
}
谢谢

问题在于你的“如果”陈述:

if (change <= 500 && change > 1)

        System.out.print(change + "p " + nbCoins +" coins ");
if (change <= 500 && change > 1)

    System.out.print(change + "p " + nbCoins +" coins ");

{
    //your other if statements
}
if(更改1)
系统输出打印(更改+“p”+nbCoins+“硬币”);
仅包括第一个“打印”。看起来您打算将其余的if语句保留在该if中,因为它们被
{
}
包围


如果您移动
系统输出打印(更改+“p”+nbCoins+“硬币”){
后面的一行(基本上向下两行)上进行编码>,然后整个过程应该如您所期望的那样工作。

如果if语句中只有一条语句,则不需要大括号。因此,您最后一条if语句的位置是:

if (change <= 500 && change > 1)

        System.out.print(change + "p " + nbCoins +" coins ");
if (change <= 500 && change > 1)

    System.out.print(change + "p " + nbCoins +" coins ");

{
    //your other if statements
}

“超出范围”是指like main无法访问函数中创建的变量。如果您在这些花括号中创建了新变量,main将无法看到它们。

您的循环似乎与当前一样不必要。您可以通过使用循环删除大量(重复)代码,但要遵循

int[] change = {200, 100, ... , 2, 1};
int changeDue = BIO.getInt();
String changeGiven = "";

for (int i = 0; i < change.length(); arr++)
{
    int n = arr[i];
    int k = changeDue / n;

    changeGiven += String.format(
        "%s%s%i%s\n",
        (n / 100 >= 1 ? "£" : ""), 
        (k > 1 ? k + "*" : ""),
        (n / 100 >= 1 ? n / 100 : n),
        (n / 100 < 1 ? "p" : "")
    );          
}

System.out.println(changeGiven);
int[]change={200100,…,2,1};
int changeDue=BIO.getInt();
字符串changeGiven=“”;
对于(int i=0;i=1?),
(k>1?k+“*”:“”),
(n/100>=1?n/100:n),
(n/100<1?“p”:“
);          
}
系统输出打印项次(变更给定);

如果(更改1)
您确定
之后的打印位置正确吗?它是否应该在“卷曲”中
{}
?如果您不想将该消息放在底部,那么为什么要将其包括在内?它总是按照您的指示进行打印。我确实想要它,但前提是它在2到500之间