Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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_Math - Fatal编程技术网

如何修复java程序中的数学错误以恢复更改

如何修复java程序中的数学错误以恢复更改,java,math,Java,Math,我的小组和我正在用Java编写一个稍微简单的程序,它将采用两种不同的价格并计算两者之间的变化。我们似乎无法找到/解决的一个问题是,变化的数学完全不正确 注意:我们正在使用Repl.it import java.util.Scanner; class Main { public static void main(String[] args) { String input, cost, payment, change; String bills, coin

我的小组和我正在用Java编写一个稍微简单的程序,它将采用两种不同的价格并计算两者之间的变化。我们似乎无法找到/解决的一个问题是,变化的数学完全不正确

注意:我们正在使用Repl.it

import java.util.Scanner;

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

        String input, cost, payment, change;
        String bills, coins;
        int dollarsOwed, dollarsPaid;

        Scanner money = new Scanner(System.in);

        System.out.println(" ");
        System.out.println(
                "Please enter the amount of the purcahse followed by the amount of a payment, separated by a comma.");

        System.out.println(" ");
        System.out.print("Amount of Purchase, Amount of Payment: ");
        input = money.nextLine();

        int a = input.indexOf(",");
        payment = input.substring(a + 1);
        cost = input.substring(0, a);
        double x = Double.parseDouble(cost);
        double y = Double.parseDouble(payment);

        dollarsOwed = (int) x;
        double centsOwed1 = (x - dollarsOwed) * 100;
        centsOwed1 = Math.round(centsOwed1);
        int centsOwed = (int) centsOwed1;

        dollarsPaid = (int) y;
        double centsPaid1 = (y - dollarsPaid) * 100;
        centsPaid1 = Math.round(centsPaid1);
        int centsPaid = (int) centsPaid1;

        String billsString = billsChange(dollarsOwed, dollarsPaid);
        String centsString = coinsChange(centsOwed, centsPaid);
        printBills(billsString);
        printCoins(centsString);

    }

    static String billsChange(int dollarsOwed, int dollarsPaid) {
        int dollarsReturned;
        int thisDenomination = 0;
        String retString = "";

        dollarsReturned = dollarsPaid - dollarsOwed;

        // Calculate $100 bills needed
        thisDenomination = dollarsReturned / 100;
        dollarsReturned -= thisDenomination * 100;
        retString += Integer.toString(thisDenomination);

        // Calculate $50 bills needed
        thisDenomination = dollarsReturned / 50;
        dollarsReturned -= thisDenomination * 50;
        retString += Integer.toString(thisDenomination);

        // Calculate $20 bills needed
        thisDenomination = dollarsReturned / 20;
        dollarsReturned -= thisDenomination * 20;
        retString += Integer.toString(thisDenomination);

        // Calculate $10 bills needed
        thisDenomination = dollarsReturned / 10;
        dollarsReturned -= thisDenomination * 10;
        retString += Integer.toString(thisDenomination);

        // Calculate $5 bills needed
        thisDenomination = dollarsReturned / 5;
        dollarsReturned -= thisDenomination * 5;
        retString += Integer.toString(thisDenomination);

        // Calculate $1 bills needed
        retString += Integer.toString(dollarsReturned);

        return (retString);

    }

    static String coinsChange(int centsOwed, int centsPaid) {
        int changeReturned;
        int thisDenomination = 0;
        String retString = "";

        changeReturned = centsPaid - centsOwed;

        // Calculate quarters(25¢) needed
        thisDenomination = changeReturned / 25;
        changeReturned -= thisDenomination * 25;
        retString += Integer.toString(thisDenomination);

        // Calculate dimes(10¢) needed
        thisDenomination = changeReturned / 10;
        changeReturned -= thisDenomination * 10;
        retString += Integer.toString(thisDenomination);

        // Calculate nickels(5¢) needed
        thisDenomination = changeReturned / 5;
        changeReturned -= thisDenomination * 5;
        retString += Integer.toString(thisDenomination);

        // Calculate pennies(1¢) needed
        retString += Integer.toString(changeReturned);

        return (retString);
    }

    static void printBills(String bills) {
        String printString = "";
        String billName = "";
        for (int i = 0; i <= 5; i++) {
            if (bills.charAt(i) != '0') {
                switch (i) {
                case 0:
                    billName = "$100";
                    break;
                case 1:
                    billName = "$50";
                    break;
                case 2:
                    billName = "$20";
                    break;
                case 3:
                    billName = "$10";
                    break;
                case 4:
                    billName = "$5";
                    break;
                case 5:
                    billName = "$1";
                    break;
                }
                printString += (bills.charAt(i) + "-" + billName + " ");
            }
        }
        System.out.print(printString);
    }

    static void printCoins(String coins) {
        String printString = "";
        String coinName = "";
        for (int i = 0; i <= 3; i++) {
            if (coins.charAt(i) != '0') {
                switch (i) {
                case 0:
                    coinName = "$0.25";
                    break;
                case 1:
                    coinName = "$0.10";
                    break;
                case 2:
                    coinName = "$0.05";
                    break;
                case 3:
                    coinName = "$0.01";
                    break;
                }
                printString += (coins.charAt(i) + "-" + coinName + " ");
            }
        }
        System.out.print(printString);
    }
}
import java.util.Scanner;
班长{
公共静态void main(字符串[]args){
字符串输入、成本、付款、更改;
串钞票、硬币;
欠美元,付美元;
扫描器钱=新扫描器(System.in);
System.out.println(“”);
System.out.println(
“请输入购买金额,然后输入付款金额,用逗号分隔。”);
System.out.println(“”);
系统输出打印(“购买金额,付款金额:”);
输入=money.nextLine();
int a=input.indexOf(“,”);
付款=输入。子字符串(a+1);
成本=投入。子串(0,a);
double x=double.parseDouble(成本);
双y=双y。双y(付款);
dollarsOwed=(int)x;
双百分比1=(x-美元欠款)*100;
centsOwed1=数学圆(centsOwed1);
int centsOwed=(int)centsOwed1;
美元汇率=(整数)y;
双分位数1=(y-美元支付)*100;
centsPaid1=数学圆(centsPaid1);
int centsPaid=(int)centsPaid1;
字符串billsString=billsChange(美元已付款,美元已付款);
字符串centsString=coinsChange(centsOwed,centsPaid);
打印账单(账单串);
印刷硬币(分硬币);
}
静态字符串billsChange(int dollarsOwed,int dollarsPaid){
返回整数美元;
int this面额=0;
字符串retString=“”;
dollarsReturned=dollarsPaid-dollarsOwed;
//计算所需的100美元账单
此面额=返回美元/100;
返回美元-=此面额*100;
retString+=Integer.toString(ThisDemination);
//计算所需的50美元账单
此面额=返回美元/50;
返回美元-=此面额*50;
retString+=Integer.toString(ThisDemination);
//计算所需的20美元账单
此面额=返回美元/20;
返回美元-=此面额*20;
retString+=Integer.toString(ThisDemination);
//计算所需的10美元账单
此面额=返回的美元/10;
返回美元-=此面额*10;
retString+=Integer.toString(ThisDemination);
//计算所需的5美元账单
此面额=返回美元/5;
返回美元-=此面额*5;
retString+=Integer.toString(ThisDemination);
//计算所需的1美元账单
retString+=Integer.toString(dollarsReturned);
返回(retString);
}
静态字符串coinsChange(int centsOwed,int centsPaid){
返回的整数;
int this面额=0;
字符串retString=“”;
changeReturned=centsPaid-centsOwed;
//计算所需的季度数(25美分)
ThisDemination=changeReturned/25;
changeReturned-=此面额*25;
retString+=Integer.toString(ThisDemination);
//计算所需的10美分
ThisDemination=changeReturned/10;
changeReturned-=此面额*10;
retString+=Integer.toString(ThisDemination);
//计算所需的镍币(5美分)
ThisDemination=changeReturned/5;
changeReturned-=此面额*5;
retString+=Integer.toString(ThisDemination);
//计算所需的便士(1美分)
retString+=Integer.toString(changeReturned);
返回(retString);
}
静态作废打印票据(字符串票据){
字符串printString=“”;
字符串billName=“”;

对于(int i=0;i我认为问题是因为您使用int作为您的数据类型,当您减去int s数据类型时,小数位数会被删除,因此,如果您执行15-11.33,则会得到4,因为在int数据类型中会删除.33

int dollarsOwed, int dollarsPaid   
dollarsReturned = dollarsPaid - dollarsOwed;

将这些变量更改为double或float,这将解决问题。

这将是一个学习如何调试代码的好时机。您可以看到:弄清楚“为什么我的代码没有完成我希望它完成的任务”就像“学习编程”的一半.不要太快地将这部分委托给其他人…我会做的是:对于所有的计算,打印中间结果。然后你运行一些示例,你也手动进行所有计算。然后,对于每个计算,你都比较你的“手动”结果是代码中的一个。是的,枯燥乏味的工作。欢迎调试。编写代码既简单又漂亮。让它开始工作是真正有趣的部分。因为他不是在减去15-11,而是在尝试减去15-11.33,而是使用int作为数据类型。那么你的答案应该是这样的;)…还请注意,您很快就会遇到典型的浮点数学问题。通常,由于舍入和精度问题,浮点数学和货币是不可能的。我建议换一种方式,确保所有数字都以“分”为基础,因此到处都是*100。这样就没有“逗号”这是另一个很好的解决方案,将所有内容都更改为美分,并将其上的do逻辑更改为:)