我的Scala代码出了什么问题?

时间:2018-04-17 18:07:07

标签: scala

在下面的代码中,我尝试编写一个简单的Scala程序来测试我最近对Scala的学习。

import java.io.PrintWriter

object Solution {

    def getval(n: Int): Long = {
        val stdin = scala.io.StdIn
        var ans:Long = 0;
        var i = 0;

        for(i <- 1 to n){
            val str:String = stdin.readLine;
            val z:Int = stdin.readLine.trim.toInt;

            if(str.charAt(0)=='h'){
                if(z > 0) ans = ans + 1
            }
            else {
                if(z > ans) ans = ans + 2
            }
        }

        ans
    }

    def main(args: Array[String]) {
        val stdin = scala.io.StdIn
        val n = stdin.readLine.trim.toInt
        val result = getval(n)
        println(result)

    }
}

编译时,它会一直给我No such file or directory错误。我的代码出了什么问题?

编辑:代码编译好了。但是,通过以下对程序的输入,我现在得到Java运行时异常:

输入:

4
abs 2
xyz 1
tes 3
pop 6

异常消息:

java.lang.NumberFormatException: For input string: "xyz 1"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at scala.collection.immutable.StringLike.toInt(StringLike.scala:301)
    at scala.collection.immutable.StringLike.toInt$(StringLike.scala:301)
    at scala.collection.immutable.StringOps.toInt(StringOps.scala:29)

1 个答案:

答案 0 :(得分:1)

您收到错误,因为您提供了一个字符串

  

xyz 1

到假定字符串为整数

的行
val z:Int = stdin.readLine.trim.toInt;

如果您的数据看起来像一个字符串后跟空格和数字,那么

val z:Int = stdin.readLine.trim.split(' ').last.toInt 

特别是你的第一行str - 读取abs2然后第二行尝试读取xyz 1