【问题标题】:Scala - foreach is not a member of IntScala - foreach 不是 Int 的成员
【发布时间】:2014-06-16 15:05:58
【问题描述】:

我是 Scala 的新手,必须编写一个程序来计算给定整数列表的平均值。

但是,我总是得到错误:

foreach 不是 Int 的成员。

你们中有人知道如何解决这个问题吗?这是我的代码:

 var measureResults = List(100, 36, 54, 4, 22, 37, 86, 20, 3000)

 var averageResult = getAverage(measureResults)

 println(averageResult)

 def getAverage(measureResults: List[Int]): Double = {
    var entryList = listOfValidElements(measureResults)
    var average = entryList(0)
    for (element <- average){
      average =+ 1 
      var trueAverage = average/length(entryList)
      return trueAverage
   }
 }

【问题讨论】:

  • 1) 请缩进您的代码。 2)请在您的问题中包含错误。 3) average 可能是 Int 上的 &lt;- 没有意义。 4)计算L的平均值由sum(L)/len(L)完成。
  • 您为什么要使用带有可变变量和for 循环的类Java 代码而不是仅仅编写list.sum / list.size 来计算平均值?
  • 如果你想计算平均值。您必须将所有元素彼此相加,然后除以它们的数量。
  • 请用显示错误的最小示例替换您的代码。就目前而言,这个问题没有什么持久价值,应该可以关闭——对于遇到同样错误的人来说,代码示例过于复杂。对于希望在 Scala 中计算平均值的人来说,一个更简单、更直接的问题会更好。

标签: scala loops for-loop int each


【解决方案1】:

实际回答问题

但是我总是得到错误:foreach 不是 Int 的成员。

你们中有人知道如何解决这个问题吗?

在你的代码中:

var average = entryList(0)
for (element <- average){

你取entryList 中的第一个条目,它是一个 Int。然后你尝试迭代它,这没有任何意义,并导致你得到的错误

你的意思可能是这样的

var average  = 0
for (element <- entryList) {

(和average += element 不是average += 1

但正如其他人指出的那样,在 Scala 中有更好的计算方法

【讨论】:

    【解决方案2】:

    一种更类似于 Scala 的方法,

    def average(list: List[Int]): Double = {
      list.sum.toDouble / list.size
    }
    

    注意没有return语句,返回的是最后一个表达式;并且不涉及可变性。将总和转换为Double 可确保浮点除法和结果。为简洁起见,方法名称省略了 get 前缀,并最终以非 getter 类方法来传达。

    根据这些注释,var measureResults = List(1,2,3) 可能会变为不可变val measureResults = List(1,2,3)

    【讨论】:

    • 一种更简单的方法:def average(list: List[Int]): Double = list.sum.toDouble / list.size :-)
    • 不幸的是,这被标记为答案,因为它甚至没有尝试回答问题(它回答了另一个应该更直接/简洁地提出的问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多