2

我正在尝试对 Java bean 中的双精度数组进行洗牌,以便在 JSP 文件中使用。

在我的 java bean 的默认构造函数中,我有:

amounts  = new double[] {0.5, 1, 1.5, 2, 2.5. 3, 3.5, 4};

Collections.shuffle(Arrays.asList(amounts));

我可以很好地调用 bean 的方法,但由于某种原因,数量数组保持不变,所以它要么没有洗牌,要么没有执行默认的构造函数。没有抛出错误,所以我相信它可能是构造函数没有执行,但我不知道为什么。

在我的 JSP 中,我使用:

<jsp:useBean id="myBean" class="logic.logicBean" scope = "session" />

我认为这样做会执行默认构造函数,这是错误的吗?

4

1 回答 1

10

Arrays.asList(amounts)期望T...,其中T是对象类型。这里的问题是你正在通过double[],所以你的列表实际上是List<double[]>- 不是List<Double>。其他答案不正确,因为Arrays.asList保证“直写”到后备数组。

Arrays.asList...

返回由指定数组支持的固定大小的列表。(将返回的列表“写入”到数组的更改。)

为了证明这一点,请尝试声明amountsasDouble[]并允许编译器自动装箱(还要确保更正文字的类型,即添加.0D后缀):

amounts = new Double[] { 0.5, 1.0, 1.5, 2.0, 2.5, 3, 3.5, 4.0 };

请注意,它现在将正常运行:-)

于 2012-09-08T18:10:42.670 回答