0

スカラ

私はscalaプログラミングが初めてです。行から整数を読み取るコードを書いています。私がしたことは次のとおりです。

  1. integer(1 2 4 5 6) の行を読む
  2. スペース 1,3,5 は空白であるため、0,2,4,6 の位置で文字を読み取りますが、10 を読み取る場合は 1 のみがリードです。

私のコードは

 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 を取り、入力された文字列でのみ必要な int のリストを提供する st.split(" ").toList を取ることができます。このリストでは、次のように map 関数を使用できます: list map (p => Integer.parseInt(p)) リストから各要素 p を取得し、Integer.parseInt によって取得した結果の要素に置き換えます。 (p) 関数。

于 2015-03-14T20:01:33.410 に答える