3

このコードでこのエラーが発生するのはなぜですか? コレクションとArrayListの正しいインポートがあります

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);
}

もう一方の方法では、List を非公開にすることはできません。元の参照を持つ人は、あなたのプライベートな状態を操作できます。

于 2013-07-14T22:35:59.780 に答える