public class Balance {
public static void main(String[] args) {
System.out.printf("%.2f\n", balance(0.0, 0.0, 0.0));
}
/**
* @param principal
* @param rate
* @param years
* @return
*/
public static double balance(double principal, double rate, double years) {
double amount = 0;
Scanner sc = new Scanner(System.in);
System.out.print("Enter the initial investment amount: ");
principal = sc.nextDouble();
System.out.print("Enter the interest rate: ");
rate = sc.nextDouble();
System.out.print("Enter the number of years: ");
years = sc.nextDouble();
for (int i = 1; i < years; i++) {
amount = principal * Math.pow(1.0 + rate, years);
amount += principal;
}
return amount - principal;
}
}
我的问题在于我在main方法中使用的printf行。 Eclipse希望我将方法平衡从void更改为Object []。当我这样做时,我必须从余额中返回一个值。所以我想我的问题是,我将如何返回正确的值?我是在正确的轨道上吗?感谢您的时间和建设性的批评。 :)
编辑 - 感谢大家的帮助,非常感谢:)我的数学已关闭。我的结果比我应该拥有的多1000个。嗯。
所以我应该从这样的数量中拿出1000:
return amount - 1000;
或者这个:
return amount - principal;
编辑这就是我今晚要去的地方。感谢大家的帮助。 :)
答案 0 :(得分:5)
几点:
balance()
不能为空,因为您在S.out.printf()
中使用其返回值。你想要平衡打印到屏幕上,还是想让它产生一个数字?
您的循环for (years = 0; years > 10; years++)
将无法运行。想想为什么。将for
转换为while
可能会有所帮助,以便可视化原因。
您在几年内读作double
,但在循环中将其用作计数器。它究竟应该是什么类型的?
您的balance()
函数有三个参数,然后立即获取输入并删除它们。您希望为这些号码提供balance()
,还是希望它们提取?
否则,你似乎走在了正确的轨道上。
答案 1 :(得分:4)
问题是balance
没有返回任何内容,(它是void
函数)。将其更改为:
public static double balance(double principal, double rate, double years) {
...
在该功能中,return
余额。
Java告诉你它需要Object[]
,因为printf
的定义如下:
public static void printf(String format, Object ... params) {
// params is an Object[]
}
这让你做的是传递这样的参数:
printf("some string", first, second, etc);
它允许您传递任意数量的参数,并且该函数可以像处理数组一样处理它们。
它的定义完全相同:
public static void printf(String format, Object[] params);
你用它就是这样:
printf("some string", new Object[] { first, second, etc});
它更容易使用。
编辑:
另一种选择是不在main
中打印任何内容,但我肯定会建议返回结果并将其打印在main
中。这遵循使每个功能尽可能少的原则。 balance
应该只计算余额。打印它是无关的。
答案 2 :(得分:3)
请考虑更严格地重新编写代码;实际上,您的balance()
函数正在所有您的程序的工作(并且您的printf()
行感觉就像是事后的想法)。如果你根据代码的作用分解你的代码,我认为你可以做得更好:
当您在三周内重新编写程序以使用GUI或Web服务时,您肯定会感谢您编写了每个函数来执行一个任务,并且做得很好。您还会发现测试只执行一项任务的较小代码片段要容易得多。
存在 over engineering 过于通用的解决方案的风险 - 我真正想要建议的是将代码功能性地分解为多个较小的例程,这些例程正如他们的名字所说的那样。您可能永远不会将程序移动到GUI或Web服务或其他任何方式,但当有人报告您的摊销计划错误,您可以通过更简单的编程控制它,而不是必须整天重新输入输入时,您肯定会更高兴长。
答案 3 :(得分:-1)
你错了,这样做:
public static void main(String[] args) {
balance(1000.0, .05, 8.5);
}