我想检查字符串是否包含该字符。我正在写一个刽子手代码。
例如,这里是猜测的词:"scala"
,但它看起来像"_ _ _ _ _"
用户。假设用户输入了字母'a'
,那么它必须看起来像"_ _ a _ a"
。
def checkGuess(){
if (result.contains(user_input)) {
val comp = result.toCharArray
for (i <- comp){
if (user_input != comp(i))
comp(i) = '_'
comp(i)
}
val str = comp.toString
}
}
这是对的吗?
提前谢谢。
答案 0 :(得分:7)
我不认为这是作业,所以如果是......我可能会后悔回答......
case class HangmanGame(goal: String, guesses: Set[Char] = Set.empty[Char]) {
override def toString = goal map {c => if (guesses contains c) c else '_'} mkString " "
val isComplete = goal forall { guesses.contains }
def withGuess(c: Char) = copy(guesses = guesses + c)
}
然后
val h = HangmanGame("scala")
h: HangmanGame = _ _ _ _ _
scala> val h1 = h.withGuess('a')
h1: HangmanGame = _ _ a _ a
scala> val h2 = h1.withGuess('l')
h2: HangmanGame = _ _ a l a
scala> val h3 = h2.withGuess('s')
h3: HangmanGame = s _ a l a
scala> val h4 = h3.withGuess('c')
h4: HangmanGame = s c a l a
scala> h4.isComplete
res5: Boolean = true
<强>更新强>
好的,所以它确实看起来像家庭作业。我想现在这个精灵已经出了瓶子,但是除非你很快加快Scala的速度,否则你很难解释它是如何工作的。
答案 1 :(得分:1)
怎么样:
scala> def checkGuess(str: String, c: Char) = str.replaceAll("[^"+c+"]","_")
checkGuess: (str: String,c: Char)java.lang.String
scala> checkGuess("scala",'a')
res1: java.lang.String = __a_a
scala> def checkGuess2(str: String, C: Char) = str map { case C => C; case _ => '_'}
checkGuess2: (str: String,C: Char)String
scala> checkGuess2("scala",'a')
res2: String = __a_a
答案 2 :(得分:0)
以下是关于你如何写这篇文章的一些评论。使用此语法def checkGuess() { ... }
时,函数不会返回任何值,而是返回Unit。
这意味着您仅将其用于副作用(例如在代码块外部设置一些var或打印一些值)。问题是您没有设置任何值或在函数内打印任何内容(无打印,无分配)。
您未在代码段中显示的内容是存储要猜测的字符串,用户输入和要打印的反馈。您可以将前两个作为参数传递,将最后一个作为返回值传递。这使得输入和输出自包含在函数中,并且不会假定您在何处呈现反馈。
def feedback(target:String, guesses:String): String = {
// target is the string to guess like "scala"
// guesses are the letters that have been provided so far, like "ac"
// last expression should be the feedback to print for instance "_ca_a"
}
然后你可以考虑将函数转换为target
中的每个字母_或其自身,具体取决于它是否包含在guesses
中。为此,target map { c => expr }
如果你知道如何使 expr 返回 c ,如果c在guesses
和'_',那么{{1}}将会很好用
答案 3 :(得分:0)
尽可能靠近主要问题(如何检查字符串中是否包含字符?),我所做的就是改变方法,即:
在 for 循环中,我想做类似some_chr == 't'
的事情
我做了以下some_chr.toString == "t"
,它工作得很好。