我在Scala代码中的foreach有什么问题

时间:2016-11-28 12:45:01

标签: scala

下面是我的scala代码,但是第13行,有一个错误说"缺少参数类型",不确定我的问题是什么?

class OneAway {

  def isOneAway(s1:String, s2:String):Boolean={
    if(s1.equals(s2))
        return true
    else if( s1.length > s2.length + 1 || s1.length < s2.length - 1)
      return false
    else 
    {
      var count:Int=0
  s1.chars().forEach(a=>{
        if(a!=s2.charAt(count)){         
            return  s2.substring(count+1).equals(s1.substring(count)) ||    s1.substring(count+1).equals(s2.substring(count))
        }
        count=count+1
      }
        )      
      return true
    }

  }
}

2 个答案:

答案 0 :(得分:5)

foreach应全部为小写,并且会丢失其中的花括号。

另外,即使你没有问......这是编写scala代码的可怕方法。在您遇到的99%的情况下,您将希望避免使用返回,可变状态和(有一些例外)对序列的索引访问。 在某些情况下,您的代码也会抛出非法索引异常。

在scala中执行所需操作的正确方法是:

@tailrec
def isOneAway(s1: String, s2: String): Boolean = (s1.headOption, s2.headOption) match {
  case (None, None) => true
  case (a,b) if a == b => isOneAway(s1.tail, s2.tail)
  case _ if s1.length == s2.length + 1 => s1.tail == s2
  case _ if s2.length == s1.length + 1 => s2.tail == s1        
  case _ => false
}

答案 1 :(得分:4)

应该是

s1.foreach(a=>{....})

chars()来自java8,你正在使用scala。你可以简单地在String对象上使用foreach。