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 | 1388 (1087) | Randomness |
| » | java pomočOddelek: Programiranje | 2117 (1509) | kr?en |
| » | [Java] Ali array vsebuje primitivno vrednost?Oddelek: Programiranje | 1579 (1323) | t3hn0 |
| » | Java-random-poljeOddelek: Programiranje | 1075 (954) | LeQuack |
| » | JAVA - Math.random, kako določit interval?Oddelek: Programiranje | 5274 (2930) | Sergio |