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 | 1374 (1073) | Randomness | 
| » | java pomočOddelek: Programiranje | 2105 (1497) | kr?en | 
| » | [Java] Ali array vsebuje primitivno vrednost?Oddelek: Programiranje | 1566 (1310) | t3hn0 | 
| » | Java-random-poljeOddelek: Programiranje | 1061 (940) | LeQuack | 
| » | JAVA - Math.random, kako določit interval?Oddelek: Programiranje | 5264 (2920) | Sergio |