Create an array containing unique Random ints, check for duplicates

This is a school assignment that I'm really close to completing, but I don't have one. I have to generate an array of integer nodes with 100 random numbers without duplicates, checking for duplicates. I am not allowed to use Set. I am not allowed to just shuffle an array of numbers 1-1000.

Here is the code that I have in my client class, but it creates duplicates anyway:

for (int i = 0; i < SIZE; i++) {
    int j = (int)(Math.random()*1999);

 //put a random number in the first index.
    if (i == 0) {
        Node newNode = new Node(j);
        nodeArray[i] = newNode;
    }

    for (int k = 0; k < i; k++) {
        if (nodeArray[k].getInt() == j) {
            j = (int)(Math.random()*1999);
            break;
        } else {
            Node newNode = new Node(j);
            nodeArray[i] = newNode;
        }
    }
}
+3
source share
4 answers

, , . , , , , ( , while). , . , .

List<Integer> numbers = new ArrayList<Integer>(SIZE);
for (int i = 0;i<SIZE; i++) {
    addUniqueRandomNumber(numbers, SIZE*2);
}

for (int i =0;i<numbers.size; i++) {
  Node newNode = new Node(numbers.get(i));        
  nodeArray[i] = newNode;
}

addUniqueRandomNumber:

public static void addUniqueRandomNumber(List<Integer> numbers, int range) {
    int j = (int)(Math.random()*range);
    if (numbers.contains(j)) {
        addUniqueRandomNumber(numbers, range);
    } else {
        numbers.add(j);
    }
}
+2

, , if, , . , .

for (int k = 0; k < i; k++) {
    if (nodeArray[k].getInt() == j) {
        j = (int)(Math.random()*1999); //You must check if this random is also a dup
        break;
    } else {
        Node newNode = new Node(j);
        nodeArray[i] = newNode;
    }

:

int i = 0;
while (i < SIZE) {
int j = (int)(Math.random()*1999);

 //put a random number in the first index.
if (i == 0) {
    Node newNode = new Node(j);
    nodeArray[i] = newNode;
    i++;
}

for (int k = 0; k < i; k++) {
    if (nodeArray[k].getInt() == j) {
        //Do nothing
    } else {
        Node newNode = new Node(j);
        nodeArray[i] = newNode;
        i++;
    }
  }
}

i, , , .

+1

, , . , :

boolean[] used = new boolean[2000];
int[] randomUniqueIntegers = new int[SIZE];

for (int i = 0; i < SIZE; i++) {
    int num = (int) (Math.random() * 1999);

    if (!used[num]) {
        used[num] = true;
        randomUniqueIntegers[i] = num;
    } else {
        while (used[num]) {
            num = (int) (Math.random() * 1999);
            if (!used[num]) {
                used[num] = true;
                randomUniqueIntegers[i] = num;
                break;
            }
        }
    }
}

, Set . , , .

Set<Integer> set = new HashSet<Integer>();
for (int i : randomUniqueIntegers)
    set.add(i);
System.out.println(set.size());

, SIZE constant , , .

+1

, , :

int[] nodeArray = new int[100];
int currentIndex = 0;

while(currentIndex < 100) {
    int currentValue = (int) (Math.random() * 199);
    int i = 0;
    while(i < currentIndex) {
        if(currentValue == nodeArray[i]) {
            break;
        }
        i++;
    }
    if(i == currentIndex) {
        nodeArray[currentIndex++] = currentValue;
    }
}

ant

Arrays.sort(nodeArray); // Sort to be easy find duplicates
for (Integer i : nodeArray) {
    System.out.print(i + ", ");
}
+1

All Articles