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
值。