Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 我的回答无效_Scala - Fatal编程技术网

Scala 我的回答无效

Scala 我的回答无效,scala,Scala,我正在执行以下代码: def takeN(s : String, n : Int): String = { var j = 1 var o = s.split("") if(n != 0){ var arr = new Array[Char](n) } while(j <= n){ arr(j) = o(j) j += 1 } val ml = List.fromArray(arr) var

我正在执行以下代码:

def takeN(s : String, n : Int): String = {
    var j = 1
    var o = s.split("")
    if(n != 0){
      var arr = new Array[Char](n)
    }
    while(j <= n){
      arr(j) = o(j)
      j += 1
    }
    val ml = List.fromArray(arr)
    var newS = ml.mkString("")
    newS
  }
当我在以下位置运行此代码时:一切正常,但当我在家用电脑上尝试此代码时,会出现错误,因此我将其更改为:

     def takeN(s : String, n : Int): String = {
    var j = 1
    var o = s.split("")
    var arr = new Array[Char](n)
    while(j <= n){
      arr(j) = o(j)
      j += 1
    }
    val ml = List.fromArray(arr)
    var newS = ml.mkString("")
    newS
  }

我不知道如何解决这个问题。为什么scala这么难???

您发布的代码不是很地道的scala,但该语言内置了以下功能:

scala> "abcd".take(2)
res0: String = ab
如果您确实想要一个具有该签名的方法,您可以执行以下操作:

def takeN(s: String, n: Int) = 
  s.take(n)

您发布的代码不是非常地道的Scala,但该语言内置了以下功能:

scala> "abcd".take(2)
res0: String = ab
如果您确实想要一个具有该签名的方法,您可以执行以下操作:

def takeN(s: String, n: Int) = 
  s.take(n)

问题是数组从索引0开始。这里
null
只是数组元素的初始值

更简单的替代方法是使用标准Scala API:

scala> "abcd".take(2)
res0: String = ab

问题是数组从索引0开始。这里
null
只是数组元素的初始值

更简单的替代方法是使用标准Scala API:

scala> "abcd".take(2)
res0: String = ab

您可以编写一个递归答案,而不需要所有VAL和VAR。大多数代码用于保护无效输入:

def takeN (s : String, n : Int): String = {
  if (n > s.length) sys.error ("n > s.length: " + n  + " > " + (s.length))
  else if (n < 0) sys.error ("n < 0 : " + n)
  else if (n == 0) ""
  else if (n == s.length) s 
  else s(0) + takeN (s.substring (1), n-1) }
用法:

takeN ("foolish", 5)
res16: String = fooli
但让我们尝试一种更接近您的方法的解决方案:

  def takeN (s: String, n: Int): String = {
    var j = 0
    var arr = new Array[Char](n)
    while (j < n) {
      arr (j) = s(j)
      j += 1
    }
    val ml = List.fromArray (arr)
    var newS = ml.mkString("")
    newS
  }
获取的定义(s:String,n:Int):String={ var j=0 var arr=新数组[Char](n) while(j
字符串索引(在Java中)以0开始,因此我们转到j
def takeN (s : String, n : Int): String = {
  if (n > s.length) sys.error ("n > s.length: " + n  + " > " + (s.length))
  else if (n < 0) sys.error ("n < 0 : " + n)
  else if (n == 0) ""
  else if (n == s.length) s 
  else s(0) + takeN (s.substring (1), n-1) }
用法:

takeN ("foolish", 5)
res16: String = fooli
但让我们尝试一种更接近您的方法的解决方案:

  def takeN (s: String, n: Int): String = {
    var j = 0
    var arr = new Array[Char](n)
    while (j < n) {
      arr (j) = s(j)
      j += 1
    }
    val ml = List.fromArray (arr)
    var newS = ml.mkString("")
    newS
  }
获取的定义(s:String,n:Int):String={ var j=0 var arr=新数组[Char](n) while(j

字符串索引(在Java中)以0开始,因此我们转到j的方法?使用Scala的一个特定方面?我相信我做不到这一点,我必须自己编写整个方法。下周我还要参加Scala考试,试图直接学习它@赛义德,你知道你可以使用哪些语言功能,哪些不可以吗?我的意思是,有很多方法比使用数组和while循环更简单、更惯用。是的,我正在学习scala,我必须尝试使用这种方法takeN@Saeed你到底想干什么?只需使用这些参数获取一个名为
的方法
?使用Scala的一个特定方面?我相信我做不到这一点,我必须自己编写整个方法。下周我还要参加Scala考试,试图直接学习它@赛义德,你知道你可以使用哪些语言功能,哪些不可以吗?我的意思是,有很多方法比使用数组和while循环更简单、更惯用。
arr
的范围仅限于块,在
if
之后。在外部,没有定义arr,除非您在REPL中尝试此操作,并且有一个外部arr。否则,此代码不会编译。为什么要将这些变量命名为o、j、arr和m1?这是什么意思?谁应该听从你的意愿?我只是想把它做好,看看它是如何运作的,我真的没想到给他们起个好名字。它们并不意味着任何东西o是字符串S的数组表示。j将在while循环中使用,arr是一个数组,其中包含答案。我用ml把数组变成了一个字符串,更好的名称应该是,in,out,arr,list,而j可以作为索引,但是在所有这些1个字母的名称之间,它只是另一个。新闻或ml更糟。您不需要返回结果的名称,但是如果在返回前需要,
result
就可以了。
arr
的范围仅限于
if
后面的块。在外部,没有定义arr,除非您在REPL中尝试此操作,并且有一个外部arr。否则,此代码不会编译。为什么要将这些变量命名为o、j、arr和m1?这是什么意思?谁应该听从你的意愿?我只是想把它做好,看看它是如何运作的,我真的没想到给他们起个好名字。它们并不意味着任何东西o是字符串S的数组表示。j将在while循环中使用,arr是一个数组,其中包含答案。我用ml把数组变成了一个字符串,更好的名称应该是,in,out,arr,list,而j可以作为索引,但是在所有这些1个字母的名称之间,它只是另一个。新闻或ml更糟。您不需要返回结果的名称,但是
result
可以很好,如果您在返回之前需要它。我必须自己编写整个方法,尝试学习scala!Java、c、haskell、html、Css、Javascript等等,我在Java和html Css javascriptSo方面做得更好,首先尝试用Java实现它。这里的所有对象(字符串和数组)都与Java对象完全相同……我必须自己编写整个方法,尝试学习scala!Java、c、haskell、html、Css、Javascript等等,我在Java和html Css javascriptSo方面做得更好,首先尝试用Java实现它。这里的所有对象(字符串和数组)与Java对象完全相同。。。