Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to java.lang.Integer
at KnapSackWeights$Sack.getWeight(KnapSackWeights.java:124)
at KnapSackWeights.fillKnapSackRecursion(KnapSackWeights.java:93)
at KnapSackWeights.fillKnapSack(KnapSackWeights.java:73)
at KnapSackWeights.main(KnapSackWeights.java:33)


嗨,我正在研究背包问题,其中用户在一行中输入数字,而第一个数字是目标。但是,我不断收到上面指定的错误。我已经用谷歌搜索,并且我理解该错误,但是我不明白为什么在代码中抛出该错误。

最佳答案

你的问题是线

myWeights.bagOfWeights.add(weights);


在其中将类型为int[]的值添加到您确实打算包含Integer值的结构中。当您从结构中检索该数组时,JVM无法将其转换为Integer

为了让编译器捕获此类错误,编写一个好主意

class Sack extends ArrayList<Integer>


它指示编译器确保Integer值是可以放入Sack的唯一内容。

当然,这不是原始错误的解决方法,在原始错误中您尝试添加int[]。为了解决这个问题,您可能需要编写某种循环-遍历数组,并在其中逐个添加int值。

08-18 10:56