好吧,我在写一个贷款计算器,在六个月的时间里,从之前的贷款中减去剩余贷款的10%。问题并不难,我写的代码似乎。。。嗯。。。弱智。
import java.util.Scanner;
public class Program
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int amount = scanner.nextInt();
int payment;
for (int month = 0; month < 6; month++)
{
payment = amount / 10;
amount -= payment;
}
System.out.println(amount);
}
}
代码有点工作,但我做了数学和数量的输出正好是1比它应该。有什么我还没学会的java规则吗?
4条答案
按热度按时间jtoj6r0c1#
一个好问题的一个特点是包括你的输入和输出。在您的例子中,每一行输入都会产生一行输出。你应该把问题放在一个三列的表格里。第一列应该是输入整数,第二列应该是预期的输出值(您的定义),第三列应该是代码为该输入生成的内容。一旦达到生成这个表的程度,就可以构造测试了。
就您的代码而言,您可以用这样的东西来测试它,而不必学习任何关于junit的知识。下面的脚本非常简单,使用了您应该学习的工具。好吧,也就是说,如果你打算在以后的职业生涯中使用真正的操作系统。您可以使用这些工具来测试许多代码,而不考虑其语言。
以下是您的特定程序的测试shell脚本:
以下是一种执行方法:
下面是代码通过运行脚本生成的内容:
如果所有测试都通过了,那么脚本将不产生任何输出。下面是该脚本使用的测试数据。
下面是这些数据的输出规范,因为您说过您的代码生成的输出正好比您期望的多出一个。
这是脚本生成的,因为代码不符合您的规范:
如果你改变了
int
至double
在程序中的两个地方,脚本将生成以下内容:如果你想的话
floor
输出值,然后您可以使用String.format
也许它会符合规范,但在这种情况下不会,因为我盲目地遵循你的定义(比期望的多1)。但是如果你接受测试驱动的开发,你会走得更远。omhiaaxx2#
使用double而不是int,并且始终使用2个小数点,因为这是货币
}
ccgok5k53#
处理整数时,可能会因为“.”后面的部分丢失而发生这种情况。让我们举一个你的问题的例子:假设你有100美元,那么付款是:
100 / 10 = 10
90 / 10 = 9
81 / 10 = 8
73 / 10 = 7
66 / 10 = 6
60/10=6-(这是您期望数字为5的地方,但不是因为您在以前的所有计算中丢失了小数部分)
产量:54
我个人认为这种计算应该用double而不是integer
qf9go6mv4#
解决方案
下面的代码将给您四舍五入两位小数的结果。
正如前面提到的注解,当你对一个整数进行76/10运算时,结果将是7,因此小数部分将丢失。
所以在下面的解决方案中,我使用了double而不是integer,我将结果四舍五入到两个小数位上,正如您对currency的期望。
对于100的输入,代码产生结果53.15