Я освежаю свои знания в Java и работаю над упражнением из codewars. Проблема состоит в том, чтобы сравнить два массива, если элементы "одинаковы". Значение «то же самое» состоит в том, что элементы в «b» являются элементами в «a» в квадрате, независимо от порядка. Решение, которое я пытался сделать, это получить квадратный корень элемента в «b» и проверить, существует ли он в элементе «a», используя Math.sqrt (). Однако, когда я использую это как параметр для contains (), он всегда возвращает false.
Таким образом, чтобы проверить, действительно ли квадратный корень элемента 'b' существует в 'a', я попробовал простой if-else, чтобы проверить определенный элемент. Но когда я включаю его в Math.sqrt (), проблема возрастает.
Вот элементы множества a и b
int[] a = {121, 144, 19, 161, 19, 144, 19, 11};
int[] b = {121, 14641, 20736, 361, 25921, 361, 20736, 361};
что я преобразовал в список
List<Integer> setAList = Arrays.stream(setA)//int[] setA - parameter of a function
.boxed()
.collect(Collectors.toList());
List<Integer> setBList = Arrays.stream(setB)//int[] setB - parameter of a function
.boxed()
.collect(Collectors.toList());
Я преобразовал массив в список, чтобы воспользоваться методом contains ().
Это мой код, когда я пытался проверить определенный элемент
double sqrd = Math.sqrt(setBList.get(6));
return setAList.get(5) == sqrd ? true : false;
И это дало ожидаемый результат - правда.
Теперь вот код, когда я включил его в цикл for
boolean same = true;
for(int indexB : setB) {
same = setAList.contains(Math.sqrt(indexB)) ? true : false;
System.out.println(Math.sqrt(indexB) + " " + same);
}
А вот и результат
11.0 false
121.0 false
144.0 false
19.0 false
161.0 false
19.0 false
144.0 false
19.0 false
false
Сначала я думал, что проблема может быть из-за типов данных, но я попытался привести значение типа double к int, но я все еще получаю тот же результат.