Wypełnianie tablicy jednowymiarowej bez powtórzeń

0

Witam chcę wypełnić tablicę randomowymi wartościami bez powtórzeń rozmiar tablicy wynosi 4 (potem wprowadzę ograniczenie) stworzyłem taką klasę

public static int[] wypelnij(int tab[]){
		int n=10;
		int pomoc;
		Random rand = new Random();
		
	    for(int i=0; i<tab.length; i++){
	    	do{
	    		pomoc=rand.nextInt(n+1);
	    	}while(Arrays.asList(tab).contains(pomoc)); // zamienia mi tablicę na listę po czym przeszukuje czy wartość wylosowana się w niej znajduje 
	    	tab[i]=pomoc;
	    }
		return tab;
	} 

ale problem w tym że dalej mam powtarzające się wartości

0

Możesz użyć Set jeżeli chcesz mieć unikalne wartości.

Random rand = new Random();
Set<Integer> generated = new LinkedHashSet<>();

int numbersNeeded = 4;
int max = 10;

while (generated.size() < numbersNeeded) {
    Integer next = rand.nextInt(max) + 1;
    generated.add(next);
}

generated.forEach(System.out::println);
0

problem w tym że mam to mieć na tablicach wolałbym znaleźć błąd czemu contain nie działa

0

Arrays.asList(tab) tworzy Ci listę tablic typu int, która siłą rzeczy nie zawiera liczby tylko tablice z liczbami.

// otrzymujesz to
List<int[]> ints = Arrays.asList(tab);
// nie to
List<Integer> ints = Arrays.asList(tab);
0

Tzn. tworzy listowną reprezentację tablicy ale nie modyfikuje mi tablicy tylko tworzy osobną listę nie wiem czy to miałeś na myśli czy źle na kursie było napisane :)

1

Możesz spróbować użyć binarySearch, co w twoim przypadku może wystarczyć:

int max = 10;
int[] tab = new int[4];

Random rand = new Random();

for (int i = 0; i < tab.length; i++) {
    int randomNumber;

    // sort modyfikuje tablicę, więc musimy zrobić kopię
    // sort jest konieczny do binarySearch'a
    int[] tmpTab = Arrays.copyOf(tab, tab.length);
    Arrays.sort(tmpTab);

    do {
        randomNumber = rand.nextInt(max + 1);
    }
    while (Arrays.binarySearch(tmpTab, randomNumber) > 0);

    tab[i] = randomNumber;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1