如何修复java程序中的数学错误以恢复更改
我的小组和我正在用Java编写一个稍微简单的程序,它将采用两种不同的价格并计算两者之间的变化。我们似乎无法找到/解决的一个问题是,变化的数学完全不正确 注意:我们正在使用Repl.it如何修复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
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逻辑更改为:)