我正在编写一个代码来打印所有字符及其ascii值,从'a'到'z'。
使用以下代码段,我可以执行此操作。
var c = 'a'
while(c < 'z'){
println(c +" = " + c.toInt)
var p = c.toInt
p += 1
c = p.toChar
}
但是当我做跟随时(比如c)
var c = 'a'
while(c < 'z'){
println(c +" = " + c.toInt)
c += 1 // or c = c + 1.toChar
}
它给了我以下错误
found : Int
required: Char
有没有更好的方法来增加scala中的字符。
谢谢,
山塔努
答案 0 :(得分:5)
根据要求,这里还有另一个选项来自评论:
('a' to 'z').map(_.toInt).foreach(println)
答案 1 :(得分:4)
答案 2 :(得分:1)
另一种观点是使用Streams。除了更模块化(你可以继续conting,映射它等),它可以证明非常有效地懒惰地计算东西。在这种情况下,它是不相关的。但是我应该去读考试,所以我不得不花费大量的时间来度过一段时间......
val s = Stream.from('a').map(_.toChar)
s.take(26).force
> Stream(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z)
或作为单线
Stream.from('a').map(_.toChar).take(26).force
或有条件
Stream.from('a').map(_.toChar).takeWhile(_ <= 'z').force
这个例子可以在这里看到:http://www.scalakata.com/52bec5a5e4b0b1a1c4dc0402(不错的工具顺便说一下,谢谢@theon!)
答案 3 :(得分:1)
这应该有效:
var c = 'a'
while(c < 'z'){
println(c +" = " + c.toInt)
c = (c + 1).toChar
}
但这是对var
的一种可怕的使用,但我建议其他解决方案之一。
答案 4 :(得分:0)
这并不像@ theon的回答那么棒,但这里是一个for-comprehension版本:
scala> for(i <- 'a' to 'z') print(i.toString + ' ')
a b c d e f g h i j k l m n o p q r s t u v w x y z