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对象完全相同。。。