Уникальные значения массива JAVA
public class unicNumbers {
public static int[] getUnique(int[] numbers) {
ArrayList<Integer> unique = new ArrayList<Integer>();
for (int r :numbers){
unique.add(numbers[r]);
}
for (int i = 1; i<unique.size();i++) {
for (int r : unique) {
if (unique.get(r)== unique.get(i)){
unique.remove(i);
}
}
}
int uniqueValues[] = new int[unique.size()];
for (int w:uniqueValues){
uniqueValues[w] = unique.get(w);
}
return uniqueValues;
}
public static void main(String[] args) {
int zalupa[]= {1,2,3};
System.out.println(getUnique(zalupa));
}
}
Задача была такова: Из массива чисел вернуть уникальные. Решил сделать через ArrayList, но выдало ошибку Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3. Во-первых. Не понимаю почему. Во-вторых хотел бы увидеть другие варианты решения этой задачи (в преимуществе без ArrayList'a )
Ответы (2 шт):
Автор решения: Zeus
→ Ссылка
public static int[] getUnique(int[] numbers) {
ArrayList<Integer> unique = new ArrayList<>();
for(int i:numbers){
if(!unique.contains((i))){
unique.add(i);
}
}
numbers = new int[unique.size()];
int c = 0;
for (int i:unique){
numbers[c] = unique.get(c);
c++;
}
return numbers;
}
public static void main(String[] args) {
int[] zalupa = {1,2,3,1,1,2,3,4,4,2};
System.out.println(Arrays.toString(getUnique(zalupa)));
}
}
Автор решения: kami
→ Ссылка
Так как уникальность надо обеспечить для простых int, можно воспользоваться StreamAPI, а точнее IntStream:
public static int[] getUnique(int[] numbers){
return Arrays.stream(numbers)
.distinct()
.toArray();
}