3

为什么我收到此代码的此错误?我对 ArrayList 和 Collections 有正确的导入

private ArrayList<String> tips;

public TipsTask(ArrayList<String> tips){
    this.tips = Collections.shuffle(tips);
}
4

6 回答 6

8
Collections.shuffle(tips);

Collections.shuffle 返回 void,您不能将 void 分配给ArrayList.

例如,您可以这样做:

    Collections.shuffle(tips);
    this.tips = tips;
于 2013-07-14T22:33:31.870 回答
3

问题是该Collections.shuffle方法不返回任何内容。

你可以试试这个:

private ArrayList<String> tips;

public TipsTask(ArrayList<String> tips){
    this.tips = new ArrayList<String>(tips);
    Collections.shuffle(this.tips);
}
于 2013-07-14T22:34:13.497 回答
3

Collections.shuffle就地打乱数组。这就足够了:

private ArrayList<String> tips;

public TipsTask(ArrayList<String> tips){
    this.tips = tips;
    Collections.shuffle(tips);
}

或者,如果您不想更改原始列表:

private ArrayList<String> tips;

public TipsTask(ArrayList<String> tips){
    this.tips = new ArrayList<String>(tips);
    Collections.shuffle(this.tips);
}
于 2013-07-14T22:35:01.683 回答
1

Collections.shuffle(tips)返回无效。所以你不能把它分配给ArrayList()

你想要的是

private ArrayList<String> tips;

public TipsTask(ArrayList<String> _tips){
    Collections.shuffle(_tips);
    this.tips = _tips;
}
于 2013-07-14T22:35:11.450 回答
1

你应该这样称呼它:

private ArrayList<String> tips;

public TipsTask(ArrayList<String> tips){
    this.tips = tips;
    Collections.shuffle(tips);
}

Collections.shuffle(tips) 直接修改 ArrayList。它不需要创建副本。

于 2013-07-14T22:35:13.703 回答
1

我认为你应该这样写:

private List<String> tips;

public TipsTask(List<String> tips) {
    this.tips = new ArrayList<String>(tips);
    Collections.shuffle(this.tips);
}

另一种方式破坏了将列表设为私有。具有原始参考的人可以操纵您的私人状态。

于 2013-07-14T22:35:59.780 回答