【问题标题】:Need to create an array method, but unsure if I did it right需要创建一个数组方法,但不确定我是否做得对
【发布时间】:2017-02-21 23:23:31
【问题描述】:

我需要创建一个带有签名public double totalRent()的方法

此方法访问数组properties 中的每个Property 对象,并将物业租金相加并​​返回总金额。 回报:总租金

这是我的代码:

public double totalRent()
{

    for(int index = 0; index < property.length; index++)
    {

        int total =+ property[index];
    }
    return totalRent();
} 

这是正确的吗?它一直说总变量没有被使用,所以我不确定我是否做得对。

【问题讨论】:

  • 阅读消息,total 在每次迭代中创建,然后立即销毁 - 它没用。此外,它是 += 并且不能将 Property 对象添加到整数原语中......
  • 喜欢@AndrewL。已经指出,您的 total 变量在 for 循环中。这是一个“范围”的问题。 for 循环中的变量定义(如本例中的total)在循环结束时被销毁。因此,您每次都将一个值 (property[index]) 分配给一个新变量 (total),然后删除该变量 (total)。请参阅另一个问题:stackoverflow.com/q/8803674
  • 在 java 8 中,long total = Arrays.stream(property).sum();

标签: java


【解决方案1】:

你对代码的逻辑/理解有点不对劲,让我们尝试修复它:

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 loopoutside声明变量,使其在范围内,可以返回。 for loop 的内部,您逐步将所有值相加,然后返回。

您还会注意到我在对数组的每个元素的调用旁边添加了.getRent()。 那是因为你不能直接用 + 对对象求和,你需要对每个对象的正确字段求和。如果在Property class 内声明为public,您可以直接获取该字段,或者使用getter(如我所做的那样), ie. 一种专门访问和returns 来自对象的值的方法。

您可以通过学习encapsulation 的基本原理或直接从oracle 教程here 中了解更多关于getters 以及它们为何有用的信息。

当然,正如一些 cmets 所建议的,有 other ways 来对数组中的所有值求和,但是由于这个问题专门针对 您可能犯的错误,所以这不仅仅是足够学习了。

【讨论】:

    【解决方案2】:

    好吧,您每次迭代都在重新创建相同的总变量。总数应该在循环之外初始化,所以它不会超出范围。

    另外,您使用的是 =+,但我认为您的意思是 +=。 += 用于将后面的金额添加到前面的变量中。

    此外,您正在调用函数而不是返回。 return totalRent() 只是再次调用该函数。您应该返回变量。 (在这种情况下,总计)

    类似这样的:

    int total = 0;
    for(int index = 0; index < properties.length; index++){
      //do stuff
    }
    return total;
    

    希望这对您有所帮助,祝您编码愉快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2021-03-03
      • 2019-10-10
      • 2012-09-25
      • 2016-07-06
      相关资源
      最近更新 更多