Forum » Šola » [Java - DN] Naključna števila
[Java - DN] Naključna števila
Zixan ::
Kako bi vi generirali 7 random stevil na intervalu od 0 do 39 z uporabo arraya, ne da bi se st ponovile
- spremenil: Mavrik ()
minusnič ::
Narediš seznam 40 zaporednih od 0 do 39. Nato zmiksaš in izpišeš.
V C-ju:
V C-ju:
#include <stdio.h> #include <stdlib.h> int main (void) { char *a = (char *) malloc (39); for (size_t i = 0; i != 39;) { size_t i_1 = i + 1; a[i] = i_1; i = i_1; } for (size_t i = 0; i != 39; i++) { size_t r = rand() % 40; char a_1 = a[r]; a[r] = a[i]; a[i] = a_1; } for (size_t i = 0; i != 7; i++) printf ("%i ", a[i]); return 0; }
lebdim ::
drugače pa, sam random ti ne zagotavlja, da se katera izmed števil ne bo ponovila. če se ponovi, pač ****ga ...
švrk ::
import java.util.ArrayList; public class random { public static ArrayList<Integer> stevila(int min, int max) { ArrayList<Integer> rand = new ArrayList<Integer>(); int range = (max - min) + 1; for (int i = 0; i < 7; i++) { int randomNum = (int) (Math.random() * range) + min; boolean obstaja = false; for (int j = 0; j < rand.size(); j++) { if (rand.get(j) == randomNum) { obstaja = true; break; } } if (obstaja) { i--; } else { rand.add(randomNum); } } return rand; } public static void main(String[] args) { ArrayList<Integer> rand = stevila(0, 39); for (int i = 0; i < rand.size(); i++) { System.out.println(rand.get(i)); } } }
bella_trix ::
public class RandomStevila { public static void main(String[] args) { int[] arr = new int[7]; int counter = 0; arr[counter] = (int) (Math.random () * 39); while (counter != 6) { if (checkIfAlready(arr[counter], counter, arr) ) arr[counter] = (int) (Math.random () * 39) + 1; else arr[++counter] = (int) (Math.random () * 39) + 1; } for (int i = 0; i < arr.length; i++) System.out.print(arr[i] + " "); } public static boolean checkIfAlready (int x, int c, int[] a) { for (int i = 0; i < a.length; i++) { if (i == c) continue; if (x == a[i]) return true; } return false; } }
Če potrebuješ dodatno razlago, reci.
minusnič ::
public static void main (String[] args) { int arr = new int[40]; for (int i = 0; i != 40; i++) arr[i] = i + 1; for (int i = 0; i != 40; i++) { int tmp = arr[i]; int u = rand.nextInt (40); arr[i] = arr[u]; arr[u] = tmp; } for (int i = 0; i != 7; i++) System.out.print (arr[i] + " "); }
Prejšnja odgovora sta lahko neomejena v smislu klicev Math.random ().
minusnič ::
Za splošni primer -- n neenakih števil od m do M (M - m manjši od n) -- bi pa uporabil tako rešitev, ki je neomejena v smislu klicev Math.random(), če bi bil n veliko manjši od M - m in n majhen bi uporabil zgoraj predlagano metodo, če bi bil n veliko manjši od M - m pa n velik bi uporabil hash za O (1) vpogled, če je neka vrednost že izbrana, če bi bil n približno enak M - m bi uporabil mojo rešitev.
Zgodovina sprememb…
- spremenil: minusnič ()
technolog ::
minusič, to ni pravilno mešanje arraya.
Če ne znaš tega pravilno naredit, raje uporabi kakšno knjižnico.
Če ne znaš tega pravilno naredit, raje uporabi kakšno knjižnico.
minusnič ::
Ok, se oproščam za rešitev, v kateri ni vsaka kombinacija enako verjetna (http://blog.codinghorror.com/the-danger..., moral bi delati tako, da začnem na zadnjem elementu, gazamenjam z enim izmed n elementov (lahko tudi s seboj), potem pa šel na prejšnjega in ga zamenjal z enim izmed preostalih n - 1 (spet vključno s seboj) ... in tako do prvega elementa (ki itak lahko zamenjam le s samim seboj, kar je brezveze, in tam izstopim iz iteracije), in na koncu dobim vseh n! kombinacij enako zastopanih.
WhiteHat ::
Another sliky way after two years!
public static void main(String[] args) { int max=39,min=0,st=7,skipped=0; HashSet<Integer> HSI=new HashSet<>(); ArrayList<Integer> ALI=new ArrayList<Integer>(); while(HSI.size()<st) { int rand=(int)(Math.random()*(max-min+1)+min),size_a=HSI.size(); skipped++; HSI.add(rand); //Undesirable HashSet sorting (it sorts 16 numbers..) if (size_a!=HSI.size()) {ALI.add(rand);}// <- sorting dodge }//KONEC WHILE skipped=skipped-ALI.size(); System.out.println("Redundant numbers count: "+skipped); for(Integer intt:ALI) { System.out.print(intt+","); }//KONEC WHILE }//KONEC MAIN
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C - shranjevanje rezultatov iz baze v arrayOddelek: Programiranje | 1227 (926) | Randomness |
» | java pomočOddelek: Programiranje | 1975 (1367) | kr?en |
» | [Java] Ali array vsebuje primitivno vrednost?Oddelek: Programiranje | 1419 (1163) | t3hn0 |
» | Java-random-poljeOddelek: Programiranje | 960 (839) | LeQuack |
» | JAVA - Math.random, kako določit interval?Oddelek: Programiranje | 5172 (2828) | Sergio |