我正在尝试学习scala,这里我使用的是基本for循环,但我在编译时遇到错误。
object App {
def main(args: Array[String]) {
for (i <- 1 to 10; i % 2 == 0)
Console.println("Counting " + i)
}
}
编译时的错误:
fortest.scala:5: error: '<-' expected but ')' found.
for (i <- 1 to 10; i % 2 == 0)
^
fortest.scala:7: error: illegal start of simple expression
}
^
two errors found
我正在使用scala版本2.9.1
任何想法是什么问题..............?
答案 0 :(得分:8)
for (i <- 1 to 10 if i % 2 == 0)
println("Counting " + i)
答案 1 :(得分:7)
Scala不是Java,因此您无法使用常规Java语法。相反,你必须这样做:
for{
i <- 1 to 10
if(i % 2 == 0)
}{println("Counting " + i)}
或;
分隔符,在(
,)
括号内:
for(i <- 1 to 10;if(i % 2 == 0)){
println("Counting " + i)
}
另外,请注意Scala的表达式,有一些非常漂亮的功能。 你可以使用带有多个“循环迭代器”和条件的for表达式。
例如,而不是写:
for(i <- 1 to n; if(someCondition(i)){
for(j <- 1 to m; if(otherCondition(j)){
//Do something
}
}
您可以简单地写一下:
for{
i <- 1 to n
if(someCondition(i))
j <- 1 to m
if(otherCondition(j))
}{
//Do something
}
侧面注意:
当您扩展App
(Predef
中有该名称的特征)时,您无需定义主方法。您只需在object
的大括号中编写代码:
object MyClazz extends App {
for(i <- 1 to 10;if(i % 2 == 0)){
println("Counting " + i)
}
}
答案 2 :(得分:6)
看一下&#34; by&#34; Range类的方法按2计算
object App {
def main(args: Array[String]) {
for (i <- 2 to 10 by 2)
Console.println("Counting " + i)
}
}
或者,就像其他人已经说过的那样,你可以通过
修复你的循环object App {
def main(args: Array[String]) {
for {
i <- 1 to 10
if i % 2 == 0
}
Console.println("Counting " + i)
}
}
或另一种方式:
object App {
def main(args: Array[String]) {
val evenNumbers = for {
i <- 1 to 10
if i % 2 == 0
} yield i
Console.println(evenNumbers.mkString("\n"))
}
}
答案 3 :(得分:1)
模2条件可以移动到if子句。
object App {
def main(args: Array[String]) {
for (i <- 1 to 10)
if(i % 2 == 0)
Console.println("Counting " + i)
}
}
答案 4 :(得分:0)
这是一个简单的例子;
for (i <- List(1, 2, 3) if i < 2) println(i)
检查代码的最佳方法是使用scala shell。
答案 5 :(得分:0)
基本上,您正在尝试使用for-loop + iterator gaurd。请找到以下语法
for ( i <- 1 to 10 if (i%2==0) ) yield i