受講しているアルゴリズムのクラスのコーディングを始めたばかりで、Scala の基礎をまだかなり学んでいます (そして頻繁に失敗しています)。課題は、配列の i 次統計量を計算するプログラムを作成することです。私の問題は、以下に書いたものをコンパイルして実行し、「値 [Array] の中から要素 "+which+" を選択しています」と出力し、失速することです。エラー メッセージはありません。以下のコードにはいくつかのエラーがあると確信しています。完全な開示のために、これは宿題です。助けていただければ幸いです。
編集:ヒントをありがとう、いくつか編集しました。select は配列のより小さな部分を見ていると思いますが、コードはまだ機能しません。25% の確率で正しい答えを吐き出し、残りの時間は同じことを行います。
object hw3v2 {
//
// partition
//
// this is the code that partitions
// our array, rearranging it in place
//
def partition(a: Array[Int], b: Int, c: Int): Int = {
val x:Int = a(c)
var i:Int = b
for (j <- b to c-1)
if (a(j) <= x) {
i += 1
a(i) = a(j)
a(j) = a(i)
}
a(i+1) = a(c)
a(c) = a(i+1)
i + 1
}
def select(a: Array[Int], p: Int, r: Int, i: Int): Int = {
if (p == r)
a(0)
else {
val q = partition(a, p, r)
val j = q - p + 1
if (i <= j)
select(a, p, q, i)
else
select(a, q+1, r, i-j)
}
}
def main(args: Array[String]) {
val which = args(0).toInt
val values: Array[Int] = new Array[Int](args.length-1);
print("Selecting element "+which+" from amongst the values ")
for (i <- 1 until args.length) {
print(args(i) + (if (i<args.length-1) {","} else {""}));
values(i-1) = args(i).toInt;
}
println();
println("==> "+select(values, 0, values.length-1, which))
}
}