0
我想解决使用动态规划的Scala中的背包问题。作为需求的一部分,我还需要显示哪些项目被挑选填充到Knapsack.But中,但我得到“ArrayIndexOutOfBoundException”。 到目前为止我有什么代码如下:Knapsack中的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 to(products.length - 1))'。我不记得一个范围内的最大值是否是唯一的。 – Carcigenicate
运算符'to'是Range.Inclusive,而'until'是Range.Exclusive。如果您使用IDE并将鼠标悬停在这些运算符上,则会看到说明(包含/排除)。所以它可能应该是'直到products.length' – radumanolescu