Java memiliki untuk setiap loop.

Pada dasarnya, saya mencoba mengembangkan fungsi yang menemukan jalur acak dalam jaringan string, mengambil sebagai input string awal, panjang bilangan bulat, dan Vektor string yang akan merekam jalur. Saya mencoba melakukan ini dengan terlebih dahulu menambahkan string awal ke vektor kosong kami dan kemudian secara rekursif melintasi tetangganya hingga panjang vektor (tidak termasuk simpul awal) sama dengan panjang bilangan bulat yang disediakan dalam parameter. Sejauh ini, saya telah memberikan kode saya di sini:

public Vector<String> findRandomPathFrom(String n, int len, Vector<String> randomPath){
    randomPath.add(n);

    if (randomPath.size() == len + 2)
        return randomPath;

    for (String m : this.neighbours(n)){
        if (!randomPath.contains(m) && findRandomPathFrom(m, len, randomPath) != null)
            return randomPath;
    }

    path.setSize(path.size() - 2);
    return null;

}

Tampaknya berfungsi dengan baik, memberikan rute yang berisi persis jumlah string yang diperlukan mengikuti string awal yang disediakan. Tapi, itu menciptakan jalur yang PERSIS sama untuk setiap string awal yang diberikan setiap saat, yang bertentangan dengan gagasan bahwa itu adalah generator jalur acak. Saya menganggap masalah ini disebabkan oleh loop "untuk setiap" saya, yang menggilir semua string tetangga string Anda saat ini. Mengikuti dokumen ini, tampaknya selalu menggunakan string pertama di vektor tetangga. Adakah yang bisa membantu saya menyelesaikan masalah ini sehingga ia memilih tetangga secara acak alih-alih melanjutkan secara berurutan?

tl; dr -> Apakah ada metode untuk membuat loop "untuk setiap" di Jawa untuk memproses koleksi dalam urutan acak daripada mulai-sampai-selesai?

Terima kasih sebelumnya.

avatar smithy
@smithy

13 Kontribusi 1 Poin

Diperbarui 1 tahun yang lalu

Tanggapan

sudah coba memakai java.util.Random ?

1 Jawaban:

<div>Ya, ada metode di Java untuk membuat loop "for each" memproses koleksi dalam urutan acak daripada dari awal hingga akhir. Anda dapat menggunakan metode Collections.shuffle() untuk mengacak koleksi sebelum mengulanginya. Berikut adalah contoh kode:<br><br></div><pre>public Vector&lt;String&gt; findRandomPathFrom(String n, int len, Vector&lt;String&gt; randomPath){ randomPath.add(n);

if (randomPath.size() == len + 2)
    return randomPath;

Collections.shuffle(this.neighbours(n));

for (String m : this.neighbours(n)){
    if (!randomPath.contains(m) &amp;amp;&amp;amp; findRandomPathFrom(m, len, randomPath) != null)
        return randomPath;
}

path.setSize(path.size() - 2);
return null;

}</pre><div><br>Kode ini akan mengacak koleksi neighbours() sebelum mengulanginya. Hal ini akan memastikan bahwa tetangga berikutnya dipilih secara acak.</div>

avatar adamajalah27
@adamajalah27

119 Kontribusi 40 Poin

Dipost 1 tahun yang lalu

Login untuk ikut Jawaban