Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示更改java_Java - Fatal编程技术网

显示更改java

显示更改java,java,Java,我试着取一个零钱,少于1美元,但多于零,并显示需要零钱的25美分、10美分、5美分和1美分。输出必须以类似于英语的描述性方式呈现,并遵循以下语法规则: 如果金额为零,则应使用“否”一词。 如果金额为1,则单位必须为单数。 如果金额不是1,则单位必须是复数 此外,当输入0以下或1以上的任何内容时,程序应捕获用户错误,并进入数据验证循环以显示提示并要求用户重新输入金额。此循环将继续,直到用户输入的金额小于1.00美元,但大于零 当我运行代码时,我不断重复得到4。 谢谢您抽出时间!非常感谢您的帮助 到

我试着取一个零钱,少于1美元,但多于零,并显示需要零钱的25美分、10美分、5美分和1美分。输出必须以类似于英语的描述性方式呈现,并遵循以下语法规则:

如果金额为零,则应使用“否”一词。 如果金额为1,则单位必须为单数。 如果金额不是1,则单位必须是复数

此外,当输入0以下或1以上的任何内容时,程序应捕获用户错误,并进入数据验证循环以显示提示并要求用户重新输入金额。此循环将继续,直到用户输入的金额小于1.00美元,但大于零

当我运行代码时,我不断重复得到4。

谢谢您抽出时间!非常感谢您的帮助

到目前为止我的代码:

import java.util.Scanner;

    public class CoinChange
    {
        public static void main(String[] args)
        {               
           double amt; 
           int cents, quarter, dime, nickle, penny;

           Scanner keyboard = new Scanner(System.in); 

           System.out.print("Change in Coins\n" +
                           "----------------\n\n");

           System.out.println("Enter the amount less than $1.00, but\n" +
                            "more than zero.");

           System.out.print("\nEnter amount: ");
                    amt = keyboard.nextInt();

    // ----------------------------------------------             

           cents = (int)(amt*100 + .1);

           quarter = cents/25;
           cents %= 25;

           dime = cents/10;
           cents %= 10;

           nickle = cents/5;
           cents %= 5;

           penny = cents;

    // -----------------------------------------

           while(amt > 0 && amt <= 1)
           {

    // ----------------------------------------- 

             if(quarter == 0)
             {
                System.out.print("no ");
             }
             else
                System.out.print(quarter);
             }
             if(quarter == 1)
             {
                System.out.print("quarter");
             }
             else
             {
                System.out.print("quarters");
             }



           }           
    }
import java.util.Scanner;
公共阶级变革
{
公共静态void main(字符串[]args)
{               
双金额;
一分、二角五分、一角、五分、一便士;
扫描仪键盘=新扫描仪(System.in);
System.out.print(“硬币兑换\n”+
“--------------------\n\n”);
System.out.println(“输入少于$1.00的金额,但\n”+
“超过零。”);
系统输出打印(“\n输入金额:”);
amt=键盘.nextInt();
// ----------------------------------------------             
美分=(整数)(金额*100+1);
季度=美分/25;
美分%=25;
一角硬币=美分/10;
美分%=10;
镍币=美分/5;
美分%=5;
便士=美分;
// -----------------------------------------

虽然(amt>0&&amt我猜您输入的是数字,如1.05、1.15等。如果您输入该数字作为amt,您将乘以100(得到总美分)并加上.1(不确定您为什么这样做)。然后当你真的想要一个双精度的时候,再转换成一个整数。由于你转换成整数,美分/25通常是4,例如,115/25除以四次,余数被抛出,因此你一直得到四作为答案。

你已经声明
amt
int
而使用
float

float amt = 0.0;
int cents, quarter, dime, nickle, penny;

// Get amt from user between 0.0 and 1.0

cents = (int)amt*100;

quarter = cents/25;
cents -= quarter*25;

dime = cents/10;
cents -= dime*10;

nickel = cents/5;
cents -= nickel*5;

penny = cents;

// Then print out the numbers of each

/*
if amt = 0.91

cents = 91

quarter = 3
cents = 16

dime = 1
cents = 6

nickel = 1
cents = 1

penny = 1
*/
使用模%

float amt = 0.0;
int cents, quarter, dime, nickle, penny;

// Get amt from user between 0.0 and 1.0

cents = (int)amt*100;

quarter = cents/25;
cents = cents % 25;

dime = cents/10;
cents = cents % 10;

nickel = cents/5;
cents %= 5;

penny = cents;

// Then print out the numbers of each
完整程序

import java.util.Scanner;

public class CoinChange {
    public static void main(String[] args) {
        float amt;
        int cents, quarter, dime, nickle, penny;

        Scanner keyboard = new Scanner(System.in);

        System.out.print("Change in Coins\n" + "----------------\n\n");

        System.out.println("Enter the amount less than $1.00, but\n"
                + "more than zero.");

        System.out.print("\nEnter amount: ");

        amt = keyboard.nextFloat();
        keyboard.close();

        cents = (int) (amt * 100);

        quarter = cents / 25;
        cents = cents % 25;

        dime = cents / 10;
        cents = cents % 10;

        nickle = cents / 5;
        cents %= 5;

        penny = cents;

        System.out.println("$" + amt + " = " + quarter + " quarters, " + dime
                + " dimes, " + nickle + " nickles and " + penny + " pennies");

    }
}

测试它:

您的代码工作正常。唯一的问题是您在最后陷入了一个循环,因为amt始终是原始金额,所以它会永远打印输出

例如,如果要输出

四分之一 一刻钟 一角硬币 便士 便士

然后你需要在前进的过程中减少金额


编辑**嗯……看起来很奇怪,好像你只是在计算使用的25美分硬币的数量。但问题是一样的。我不知道你为什么需要一个循环。

Scanner.nextInt()
返回一个整数。如果您希望用户输入一个整数,从1到99,那么您应该将其分配给美分。您将自己与
金额混为一谈,您可以使用键盘.nextDouble()。您应该使用bigdecime进行货币比较。请尝试以下代码:

   public class CoinChange {    

    public static void main(String[] args) {    
        double amt = getValidInputFromUser();

        int remainingCents = (int) (amt * 100);         

        int quarters = remainingCents / 25;
        remainingCents %= 25;

        int dimes = remainingCents / 10;
        remainingCents %= 10;

        int nickles = remainingCents / 5;
        remainingCents %= 5;

        int pennies = remainingCents;

        System.out.println(String.format(
                    "Quarters %d, Dimes %d, Nickles %d, Cents %d", quarters,
                    dimes, nickles, pennies));      
    }


    private static double getValidInputFromUser() {
        double amt = BigDecimal.ZERO.doubleValue();
        do {
            Scanner keyboard = new Scanner(System.in);
            System.out.print("Change in Coins\n" + "----------------\n\n");
            System.out.println("Enter the amount less than $1.00, but\n"
                    + "more than zero.");
            System.out.print("\nEnter amount: ");
            amt = keyboard.nextDouble();
        } while (amountGreaterThanOne(amt) || amountIsZero(amt));
        return amt;
    }


    private static boolean amountIsZero(double amt) {
        return (BigDecimal.valueOf(amt).compareTo(BigDecimal.ZERO) == 0);
    }


    private static boolean amountGreaterThanOne(double amt) {
        return BigDecimal.valueOf(amt).compareTo(BigDecimal.ONE) > 0;
    }
}

您希望这行代码能做什么:
while(amt>0&&amt下一个问题:您希望
amt
是什么类型的值?您如何声明
amt
?接受一个小于1.00美元但大于零的更改量@ajb类型
int
的值大于零但小于1.00?
int
只能保存整数值。
amt
是用户输入。我将它声明为一个
int
,带有25美分、10美分等@ajbIm试图只输入0到1美元之间的数字。00@Smith无论哪种方法,你都需要转换成一个双精度来正确地划分数字。他只需要整数,这就是为什么他要乘以100。他加0.1试图使其作为输入大于零。这表示失去pr如果我只留下一个0,它仍然会重复4多次times@Smith现在检查。我必须使用模运算符来获取剩余的美分,它是规范的一部分。
cents%=10
cents=cents%10
的简写,我已经有了。@Smith别把问题留着不谈。这是我的错,我还没有回答过这是另一部分。但循环用于在用户输入高于1.00的任何内容时捕捉错误,它应该进入数据验证循环以显示提示并要求用户重新输入金额。此循环将继续,直到用户输入的金额小于1.00美元,但大于零。我在调试模式下运行了您的代码,它计算了up四分之一镍币一角硬币,等等。然后它就卡在循环中,打印出22222222…等等,因为当我输入0.68时有两个四分之一,那么在代码的这一部分中,我应该为
amt
放些什么呢
cents=(int)amt*100;