0

斯卡拉

我是 scala 编程的新手。我正在编写一个代码来从一行中读取整数。我所做的是:

  1. 读取整数行(1 2 4 5 6)
  2. 在 0,2,4,6 位置读取字符,因为空间 1,3,5 是空格,但是在读取 10 时只有 1 是 reed 。

我的代码是

 val size: Int = Console.readInt // First line read the no of integers
    val reading: String = Console.readLine // String of integer(1 4 6 7 8)

    val readingSize: Int = reading.length

    var inp: Array[Int] = new Array[Int](size)
    for (a <- 0 until readingSize if (a % 2 == 0)) inp(a / 2) = reading(a) //converting into integer array(will be ASCII value)
      println("Output : " )
       for (b <- 0 until inp.length) 
         print(inp(b).toChar + " " )

因此,例如对于输入 (1 3 5 6 7),它可以工作,但对于 (1 2 10 9),它将在 1 2 1 处停止。

我是初学者,所以我不知道这是否是阅读 scala 的完全错误的逻辑。希望我的问题很清楚提前谢谢(并且输入应该在单个值之间有一个空格)

4

2 回答 2

2

如果 std in 中的所有整数都用空格分隔,为什么不根据已知的分隔符拆分它们呢?

"1 2 10 9".split(' ')
// Array(1, 2, 10, 9)
于 2013-07-25T09:33:32.360 回答
0

我知道你的问题是什么。if for 语句你有“if (a % 2 == 0)”,其中 a 是字符串 'reading' 的索引。此代码仅适用于数字,因为如果我在此字符串中包含字符串 (3 5 4 8 7),则空格索引是奇数,如果我只取偶数索引数字,我将得到结果数字。但是如果我有字符串 (23 4 17 4 2) 这里是 3 站在奇数索引上,并且由于约束“(a % 2 == 0)”我会简单地丢失它。在您的 (1 3 5 6 7) 的情况下,它会工作得很好,因为那里只有数字,但是对于 (1 2 10 9),它会打印 1,然后错过 0,然后打印空间就是这样。它实际上会打印 1,2,1 和空格,但是您看不到空格,这就是您认为它停在 1 的原因。

但是有一种更简单的方法,你可以取一些字符串 st,它是数字和空格,然后取 st.split(" ").toList ,它只会为你提供一个仅在字符串类型中所需的整数列表,并且对于这个列表你可以像这样使用 map 函数: list map (p => Integer.parseInt(p)) 它的作用是从列表中获取每个元素 p 并将其替换为我们通过 Integer.parseInt 获得的结果元素(p) 功能。

于 2015-03-14T20:01:33.410 回答