Вывод элементов массива в заданном диапазоне
Мне нужно вывести новый массив, перебрав старый и выбрать от туда числа которые находятся в между числами int start и int end. Но у меня выдает не то что нужно.
int[] numbers = {5, 6, 8, 9, 12, 15, 20};
int start = 8;
int end = 12;
int[] nums = new int[end - start - 1];
for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (numbers[i] >= start && numbers[i] <= end) {
nums[j] = numbers[i];
}
}
}
Что я делаю не так?
for (int i = 0; i < nums.length; i++) {
if (i == 0) {
System.out.print("[");
}
System.out.print(nums[i]);
if (i < nums.length - 1) {
System.out.print(", ");
} else {
System.out.print("]");
}
}
Ответы (1 шт):
На самом деле, проблем тут очень много. Но если отвечать на конкретный вопрос: на каждой итерации по основному массиву, запускается ещё один цикл и заносит во все ячейки nums числа этой итерации (при соблюдении условия, конечно же). Так если numbers[i] будет равен 8, то запуститься внутренний цикл и во все ячейки nums положит 8. Потом на другом цикле - все ячейки затрёт девятками и т.д.
Если последней цифрой (или числом), подходящим под условие, поставить, например 11, то будет три раза 11.
Если откинуть все недочёты и некорректности кода, то конкретно эту проблему можно решить убрав цикл и просто добавив свой счётчик и прибавляя его "вручную". Получится что-то типа такого:
int[] nums = new int[end - start - 1];
int numsIndex = 0;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] >= start && numbers[i] <= end) {
nums[numsIndex] = numbers[i];
numsIndex++;
}
}
