public static int[] searchSquareM(int[] array, int m) {
m = m * m;
int countSqrM = 0;
for (int value : array) {
if (value == m) {
array[countSqrM] = value;
countSqrM++;
}
}
return Arrays.copyOf(array, countSqrM);
}
А зачем создавать внутри метода массив, если в конце все равно будете использовать Arrays.copyOf?
public static int[] findM2(int m, int... array) {
int count = 0;
for (int x : array)
if (x * x == m)
array[count++] = x;
return Arrays.copyOf(array, count);
}
Да, это, конечно, проблема.
Можно список использовать, например.
public static ArrayList<Integer> findSquaresList(ArrayList<Integer> array, int m) {
ArrayList<Integer> squaresIndex = new ArrayList<Integer>();
int mSquare = m * m;
for (int i = 0; i < array.size(); i++) {
if (array.get(i) == mSquare) {
squaresIndex.add(i);
}
}
return squaresIndex;
}
я целых пять минут, да ещё и два раза думал над этой фразой условия: «Найти среди них те, которые являются квадратами некоторого числа m.» — но не смог однозначно определить, что же требуется. Найти квадрат? Легко: m * m. Проверить, есть ли в массиве квадраты? Тоже легко, один проход, возвращаем boolean. Вернуть массив из одних квадратов? Легко, но зачем?
В общем, я, наверное, не понял условия. Мне видится хоть какой-то смысл в возврате именно индексов.
Думаю, terranum должен уточнить.
public static int[] findSquares(int[] arr) {
int length = 0; // length of result array
int[] temp = new int[arr.length]; // array filling by squares from arr
for (int i : arr) {
double sqrt = Math.sqrt((double) i);
if (sqrt - (int) sqrt == 0) { // check if sqrt is integer
temp[length++] = i;
}
}
return Arrays.copyOf(temp, length); // return array of squares with required length
}
(duoble) в Math.sqrt можно опустить, на нас работает неявное приведение.
Стоит все таки передавать некое m в параметр. А иначе логика программы сильно запутанная выходит, не по условию как то.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Можно список использовать, например.
for (Integer i: list)…
В общем, я, наверное, не понял условия. Мне видится хоть какой-то смысл в возврате именно индексов.
Думаю, terranum должен уточнить.
Стоит все таки передавать некое m в параметр. А иначе логика программы сильно запутанная выходит, не по условию как то.