我需要创建一个带有签名public double totalRent()
此方法访问数组Property
中的每个properties
对象,并总结属性租金并返回总金额。
退货:总租金
所以继承我的代码:
public double totalRent()
{
for(int index = 0; index < property.length; index++)
{
int total =+ property[index];
}
return totalRent();
}
这是对的吗?它一直说不使用总变量,所以我不确定我是否做得对。
答案 0 :(得分:2)
您对代码的逻辑/理解有点偏离,让我们尝试解决它:
public double totalRent() {
int total = 0;
for(int index = 0; index < property.length; index++){
total += (property[index]).getRent(); //assuming the getter here
}
return total;
}
这里的第一个问题是你正在返回对方法本身的调用,从而创建一个recursion,并且在那里创建一个无限的,因为你没有exit condition。
要返回 值,不函数本身。 该函数定义了你如何做某事,即逻辑算法。
正如您所说,您IDE
曾试图警告您没有使用total
的值。这是因为在它的范围内(你可以谷歌这个教程和文档,或者去here)你从来没有使用它,所以它没用。
解决方案是,您声明for loop
的变量 变量,以便在范围内,并且可以回。
for loop
的内部,您逐步将所有值相加,然后返回。
您还会注意到我在调用数组的每个元素旁边添加了.getRent()
。
这是因为你无法直接用+
对对象求和,你需要将每个对象的正确字段相加。如果字段在public
内声明为Property class
,或者使用getter
(就像我一样),您可以直接获取该字段,
ie。一种专门访问和returns
来自对象的值的方法。
您可以通过学习encapsulation的基本原则或直接从oracle教程here了解有关getters
及其有用之处的更多信息。
当然,正如一些评论建议的那样,other ways总结了数组中的所有值,但是由于这个问题是关于错误的,你可能已经犯了,这是绰绰有余。
答案 1 :(得分:0)
好吧,您每次迭代都会重新创建相同的总变量。总数应该从循环中初始化,因此它不会超出范围。
另外,你正在使用= +,但我认为你的意思是+ =。 + =用于将后一个数量添加到前一个变量。
此外,您正在调用该函数而不是返回。 return totalRent()
只是再次调用该函数。你应该返回变量。 (在这种情况下,总计)
这样的事情:
int total = 0;
for(int index = 0; index < properties.length; index++){
//do stuff
}
return total;
希望这有帮助,并且编码愉快!