0
動的プログラミングを使用してScalaのナップザック問題を解決しようとしています。要件の一部として、Knapsackで埋められるアイテムを選択する必要もあります。しかし、 "ArrayIndexOutOfBoundException"が表示されます。 そして、これまでのところ、私はコードは次のようである持っているもの:ArrayIndexOutofBoundsExceptionナップザックScala
availableMoney is equivalent to weight of knapsack.products.channels is equivalent to value[] in knapsack.products.price is equivalent to weight[] in knapsack.
def knapSack(availableMoney: Int, products: List[Product]) : Int = {
var wt = List[Int](products.length)
var value = List[Int](products.length)
for (product <- products) {
value ::= product.channels.length
wt ::= product.price
}
val matrix = Array.fill(2, 2)(0)
val picks = Array.fill(2, 2)(0)
for (i <- 1 to products.length){
for (j <- 0 to availableMoney){
if (wt(i-1)<=j){
matrix(i)(j) = max(matrix(i-1)(j),value(i-1)+matrix(i-1)(j-wt(i-1)));
if (value(i-1)+matrix(i-1)(j-wt(i-1))>matrix(i-1)(j))
picks(i)(j)= 1;
else
picks(i)(j)= -1;
}
else{
picks(i)(j) = -1;
matrix(i)(j) = matrix(i-1)(j);
}
}
}
matrix(products.length)(availableMoney)
}
どこで例外がありますか? – Carcigenicate
'for(i < - 1 to products.length)'はおそらく 'for(i < - 1(products.length - 1))'であるべきです。範囲内の最大値が排他的かどうかはわかりません。 – Carcigenicate
演算子 'to'はRange.Inclusiveで、' until'はRange.Exclusiveです。 IDEを使用してこれらの演算子にカーソルを合わせると、その説明(包括的/排他的)が表示されます。したがって、おそらく 'products.length'まででなければなりません。 – radumanolescu