// Satunnaisesti.java (c) 2004-2006 Kari Laitinen // http://www.naturalprogramming.com // 2006-01-14 Tiedosto luotu. // 2006-01-14 Viimeisin muutos. /* Satunnaisesti-luokan staattisella metodilla tee_sekoitettu_taulukko() saadaan halutun kokoinen int-tyyppinen taulukko jossa luvut 0, 1, 2, 3, ... on satunnaisessa jarjestyksessa. Talla taulukolla voidaan katevasti mm. sekoittaa korttipakka. */ import java.util.Random ; public class Satunnaisesti { public static int[] tee_sekoitettu_taulukko( int haluttu_taulukon_koko ) { int[] jarjestetty_taulukko = new int[ haluttu_taulukon_koko ] ; for ( int luku_taulukkoon = 0 ; luku_taulukkoon < haluttu_taulukon_koko ; luku_taulukkoon ++ ) { jarjestetty_taulukko[ luku_taulukkoon ] = luku_taulukkoon ; } int[] sekoitettu_taulukko = new int[ haluttu_taulukon_koko ] ; Random satunnaislukugeneraattori = new Random() ; int jarjestettyja_lukuja_jaljella = haluttu_taulukon_koko ; for ( int luvun_indeksi = 0 ; luvun_indeksi < haluttu_taulukon_koko ; luvun_indeksi ++ ) { int satunnainen_indeksi = satunnaislukugeneraattori.nextInt( jarjestettyja_lukuja_jaljella ) ; sekoitettu_taulukko[ luvun_indeksi ] = jarjestetty_taulukko[ satunnainen_indeksi ] ; while ( ( satunnainen_indeksi + 1 ) < jarjestettyja_lukuja_jaljella) { jarjestetty_taulukko[ satunnainen_indeksi ] = jarjestetty_taulukko[ satunnainen_indeksi + 1 ] ; satunnainen_indeksi ++ ; } jarjestettyja_lukuja_jaljella -- ; } return sekoitettu_taulukko ; } // tee_sekoitettu_paritaulukko() antaa sekoitetun taulukon // jossa on aina kaksi kappaletta samaa lukua. // haluttu_taulukon_koko tulee aina olla parillinen. // Jos haluttu taulukon koko on esim. 6, // palautettavassa taulukossa on luvut 0, 0, 1, 1, 2, ja 2 // sekoitetussa järjestyksessä. Tällainen metodi on // kätevä peleissä (esim. muistipeli) jossa pitää sijoittaa // aina kaksi samanlaista oliota johonkin. public static int[] tee_sekoitettu_paritaulukko( int haluttu_taulukon_koko ) { int[] jarjestetty_taulukko = new int[ haluttu_taulukon_koko ] ; int luvun_indeksi = 0 ; for ( int luku_taulukkoon = 0 ; luku_taulukkoon < haluttu_taulukon_koko / 2 ; luku_taulukkoon ++ ) { // Sama luku pannaan taulukkoon kahdesti. jarjestetty_taulukko[ luvun_indeksi ] = luku_taulukkoon ; luvun_indeksi ++ ; jarjestetty_taulukko[ luvun_indeksi ] = luku_taulukkoon ; luvun_indeksi ++ ; } int[] sekoitettu_taulukko = new int[ haluttu_taulukon_koko ] ; Random satunnaislukugeneraattori = new Random() ; int jarjestettyja_lukuja_jaljella = haluttu_taulukon_koko ; for ( luvun_indeksi = 0 ; luvun_indeksi < haluttu_taulukon_koko ; luvun_indeksi ++ ) { int satunnainen_indeksi = satunnaislukugeneraattori.nextInt( jarjestettyja_lukuja_jaljella ) ; sekoitettu_taulukko[ luvun_indeksi ] = jarjestetty_taulukko[ satunnainen_indeksi ] ; while ( ( satunnainen_indeksi + 1 ) < jarjestettyja_lukuja_jaljella) { jarjestetty_taulukko[ satunnainen_indeksi ] = jarjestetty_taulukko[ satunnainen_indeksi + 1 ] ; satunnainen_indeksi ++ ; } jarjestettyja_lukuja_jaljella -- ; } return sekoitettu_taulukko ; } }