2

私はJavaを始めたばかりなので、Rubyのもののいくつかを転記しています。私はこのようなRuby関数を持っています。これはIPv6アドレスのように見えるものを生成します。

def generate_ip()
    list = ["a", "b", "c", "d", "e", "f", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
    address = ""
    8.times do
        4.times do
            address << list.shuffle[5]
        end
        address << ":"
    end
    return address[0..-2].to_sym
end

このメソッドは、単純に文字列の配列を取得し、それらを繰り返しごちゃ混ぜにして、返される文字列を作成するたびに5番目の要素を選択します。

私の知る限り、Javaには文字列配列用の「shuffle()」メソッドがないので、自分で作成することにしました。しかし、それから私は次のようなサブ問題に完全に夢中になり始めました:

  1. どうやら、文字列配列からアイテムを削除する組み込みの方法はありませんが、これは奇妙に思えます-それは正しいですか?この機能に対する応答が10行のコードブロックである他のいくつかのSO投稿を見ました。それで、私はArrayListsを使用することにしました。ドキュメントによると、それらにはsize()、get()、remove()などの適切なメソッドがありますが...

  2. ...リテラルを使用してそれらをインスタンス化する方法、または単一のメソッド呼び出しで複数のアイテムを追加する方法を見つけられませんでした。私が見るすべてのチュートリアル(公式のOracle Javaチュートリアルを含む)は、ArrayList.add()への複数の呼び出しを使用します。それはそれをする方法ではありえませんね?

それで、私がサブ問題の土地にスパイラルダウンして50の異なる質問をする前に、私は最も重要な問題をどのように解決するかを尋ねると思いました。上記のRubyコードをJavaに変換する簡単な方法はありますか?

FWIW、私の進行中の「シャッフル」メソッドは以下のとおりです。array.lengthをループし、毎回古い配列から新しい配列にランダムな要素をコピー/削除しています。

public ArrayList<String> shuffle(ArrayList<String> array) {
        Random generator = new Random();
        ArrayList<String> shuffled = new ArrayList<String>();

        for (int i = 0; i > array.size(); i++) {
            int index = generator.nextInt(array.size());

            String popped = array.get(index);
            array.remove(index);

            shuffled.add(popped);
        }


        return shuffled;
    }
4

2 に答える 2

3

ListArrayListまたはLinkedList)を作成する場合は、 Collections.shuffle()を使用できます。

ArrayListとLinkedListは、どちらもListインターフェイスの実装です。ArrayListの方が望ましいですが(配列に支えられている)、ここでのニーズにはどちらでも問題ないと思います。これがJavaリストのチュートリアルです。

Javaでは配列は固定長ですが、aListはサイズが可変であるListため、上記の変換には一般的にがより適切です。指定された開始要素のセットを使用してリストを作成するには、Arrays.asList()を参照してください。

List stooges = Arrays.asList("Larry", "Moe", "Curly");
于 2012-12-17T11:50:39.493 に答える
2

Collections.shuffle(List<?> list, Random rnd)Javaで利用可能な組み込みライブラリ。

指定されたランダム性のソースを使用して、指定されたリストをランダムに並べ替えます。ランダム性のソースが公平であると仮定すると、すべての順列は等しい尤度で発生します。

jdkコードを開きます

于 2012-12-17T11:50:31.103 に答える