I need to do this problem:
" Prepare a rectangular array (with random natural positive dimensions) of int i variables fill it with random values from the interval [0,10). Create and display a new board created from input array by removing duplicates from each row (leaving only one occurrence of each value). "
I am not allowed to use any libraries
I tried to change dublicates to a number out of the interva [0,10) "1337" for example, and then delete all "1337" thought it would be easier, but I have out of bounds exeption
Main function:
System.out.println("Zadanie 2");
int size = (int)(Math.random()*10);
int[][] arr = new int[size][size];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = (int)(Math.random()*10);
}
}
removeDuplicates2D(arr);
System.out.println(Arrays.deepToString(arr));
My removeDuplicates2D function:
public static void removeDuplicates2D(int[][] tab) {
int column = 0, row = 0;
while (column != tab.length-1 || row != tab.length-1){
if (column == 0 && row == 0){
column++;
continue;
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
if(tab[i][j] == tab[row][column]){
tab[row][column] = 1337; // will change all duplicates to 1337
}
}
}
if(++column == tab.length-1){
row++;
column = 0;
}
}
}
For the following 6x8 table
[4, 3, 2, 5, 2, 4, 3, 0]
[3, 7, 4, 8, 3, 7, 8, 7]
[9, 4, 5, 0, 6, 7, 3, 0]
[0, 2, 3, 1, 5, 3, 7, 7]
[7, 8, 3, 9, 4, 9, 7, 4]
[8, 2, 8, 4, 0, 0, 1, 1]
The following would be the result of duplicates removed.
[4, 3, 2, 5, 0]
[7, 8]
[9, 6]
[1]
[]
[]
Details
[0-9)
indicates if the value has been seen or not. The value is its own index.itemCount
. This count will be used to create the new row for first seen values.Once the dups for a given row have been found
itemCount
1337
public static void removeDuplicates2D(int[][] tab) {
int[] dups = new int[10];
for (int row = 0; row < tab.length; row++) {
int itemCount = 0;
int[] currentRow = tab[row];
for (int col = 0; col < currentRow.length; col++) {
int value = currentRow[col];
if (dups[value] != 0) { // has been seen?
currentRow[col] = 1337;
} else {
itemCount++;
dups[value] = 1; // indicate value has been seen.
}
}
int[] newRow = new int[itemCount];
for (int k = 0, i = 0; i < currentRow.length; i++) {
if (currentRow[i] != 1337) {
newRow[k++] = currentRow[i];
}
}
tab[row] = newRow;
}
}