Напишите метод evenArray который принимает целое число типа int и возвращает массив заполненный четными числами от 1 до этого числа.
Пример ввода: 8
Пример вывода: [2,4,6,8]
Требования:
1. Метод должен быть публичным.
2. Параметр должен иметь тип int.
3. Сигнатура метода должна быть: evenArray(int number)
Я сделал так, но не правильно считает. Исправьте кто знает.
public static int[] evenArray(int number) {
int[] array = new int[number / 2];
for (int i = 0; i <=array.length; i++) {
if(array[i] % 2 == 0){
int sum=array[i];
}
}
return array;
}
Сергей
12 уровень
Напишите метод evenArray который принимает целое число типа int и возвращает массив заполненный четными числами от 1 до этого числа.
Обсуждается
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Вадим
11 октября 2020, 16:54
if(array[i] % 2 == 0) - это условие всегда будет выполнятся, ведь мы создали массив незаполненным, соответственно оно лишнее
0
Ильшат
2 июня 2020, 20:12
так ты ничего в массив и не добавляешь. по условии он у тебя 0 делит на 0 каждый раз.
int[] array = new int[number];
array[i] = i + 1;
0
Сергей
3 июня 2020, 06:09
присваивал i=1 и 2 тоже присваивал.
0
Ильшат
3 июня 2020, 07:42
зачем ты i присваивал 1 или 2?. я тебе написал готовый код.
хорошо давай более подобно напишу.
в цикле i инициализируешь как индекс массива.
первый проход: i = 0; добавляешь в массив с индексом i(то есть 0) = i(то есть 0) +1; итого в массив с индексом 0 добавлено число 1( 0 + 1 = 1); итог array[0] = 1; условие на четное число не срабатывает. т.к не делится без остатка
второй проход: i инкрементируется. i = 1; добавляешь в массив с индексом i(то есть уже 1) = i(то есть 1) +1; итого в массив с индексом 1 добавлено число 2( 1 + 1 = 2); итог array[1] = 2; дальше срабатывает твое условие. т.к число 2 делится с остатком.
.
.
.
.
.
последний проход
ну и так и далее.
все понятно?
int[] array = new int[number / 2]; а вот это лучше напиши вот так int[] array = new int[number];
-2
Сергей
3 июня 2020, 15:33
Ильшат, спасибо вам огромное за объяснение!
Не могу додумать, как число (number) сравнить с числом из возвращаемого числа.
import java.util.Arrays;
class Test {
public static void main(String[] args) {
System.out.print(Arrays.toString(evenArray(10)));
}
public static int[] evenArray(int number) {
int[] array = new int[number];
for (int i = 0; i < array.length; i++) {
if(array[i] % 2 == 0){
array[i] = (i + 1)*2 ;
}
}
return array;
}
}
но выводит [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] а по заданию должна [2, 4, 6, 8, 10] (в данном случае число равно 10 и выводиться должно до 10).
0
Ильшат
4 июня 2020, 03:53
тогда пиши как было
int[] array = new int[number / 2];
number в данном случае ни что иное как длина массива. от 0 до 10
выполняя операцию number / 2 ты меняешь длину массива до 5.
соответственно:
array[0] = 2;
array[1] = 4;
array[2] = 6;
array[3] = 8;
array[4] = 10;
0
сергей Анатольевич лукьянов
1 декабря 2020, 20:24
Сергей, при с равнении используй оператор if(число (number) >возвращаемого числа) ; rerurn true;
else: false
0
сергей Анатольевич лукьянов
1 декабря 2020, 20:49
for (int i = 0; i <=array.length; i++) { - так не скомпилируется никогда : i <array.length - вот так должен выглядеть цикл... если оставишь значение меньше или равно - это false... и компилятор не пропустит
0
ГоффMaster
1 декабря 2020, 22:04
Оно скомпилируется, но при выполнении выдаст ошибку-эксепшен и программа не закончит работу нормально. Но вот по сути Сергей Анатольевич абсолютно прав - последний индекс никогда не равен длине аррэя, потому что индекс начинается с нуля.
0