Не могу понять, что я делаю неправильно в этом методе (compute_even)

У меня возникли проблемы с пониманием того, как я должен использовать метод calculate_even в этом упражнении, надеюсь, кто-нибудь сможет мне помочь.

Не говоря уже о методе calculate_odd, я все еще думаю об этом!

Вот упражнение:

Напишите метод void с именем Choose_function, который имеет параметр n типа int. Если значение n равно четному, метод вызовет метод calculate_even, передав ему значение параметра n, иначе метод вызовет метод calculate_odd, передав ему значение n.

Два метода выведут на консоль следующую последовательность:

calculate_even: 2, 4, 8, 16, 32, 64, 128… до n

calculate_odd: 1, 3, 6, 10, 15, 21, 28… до n

Напишите программу, в которой пользователь вводит целое число n1 больше нуля (поэтому программа будет предлагать пользователю ввести значение до тех пор, пока условие не будет выполнено). Программа выведет на консоль последовательность, связанную со значением n1.

public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    int n1;
    do
    {
        System.out.println("Enter a positive integer value: ");
        n1 = input.nextInt();
    }while(n1 <= 0);

    choose_function(n1);

    input.close();
}

public static void choose_function(int n)
{
    if(n%2 == 0)
        System.out.print(compute_even(n));
    else
        System.out.print(compute_odd(n));
}

public static int compute_even(int k)
{
    int r = 1;
    do
    {
        r = r*2;
        return r;
    }while(r <= k);
}

public static int compute_odd(int k)
{

}

сильный текст


person António Mendes    schedule 05.07.2014    source источник
comment
Вам нужно напечатать все четные/нечетные числа от нуля до n1?   -  person user3717646    schedule 06.07.2014


Ответы (2)


Попробуйте этот код

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int n1;
    do {
        System.out.println("Enter a positive integer value: ");
        n1 = input.nextInt();
    } while (n1 <= 0);

    choose_function(n1);
    System.out.println();
    input.close();
}

public static void choose_function(int n) {
    if (n % 2 == 0) {
        compute_even(n);
    } else {
        compute_odd(n);
    }
}

public static void compute_even(int k) {
    int r = 0;
    while (r <= k) {
    System.out.print(""+r+" ");
        r = r + 2;  
    } 
}
public static void compute_odd(int k) {
    int r = 1;
    while (r <= k){
        System.out.print(""+r+" ");
        r = r+2;   
    }
}

Попробуйте напечатать значения внутри методов compute_odd и compute_even отдельно. Кажется, у вас тоже проблема с алгоритмом,

Вы должны использовать

int r =0;
r = r+2 // returns 0 2 4 6 8...

вместо использования

int r = 1;
r = r*2;  // This would return 2 4 8 16...

Пример вывода:

Введите положительное целое значение:

-5

Введите положительное целое значение:

5

1 3 5

person user3717646    schedule 05.07.2014
comment
Огромное спасибо, это действительно помогло мне понять это, но если вы прочитаете упражнение, то вам будет задана следующая последовательность: даже 2, 4, 8, 16, 32, 64, 128 и т. д. Благодаря вашему комментарию мне удалось получить Это! Я просто заменил начальное значение r на 2, а теперь r = r*2. - person António Mendes; 06.07.2014

Проблема здесь.

int r = 1;
do
{
    r = r*2;
    return r;
} while(r <= k);

Этот код будет возвращать 2 каждый раз вызывающей стороне. Почему? Потому что в вашем цикле вы устанавливаете r = 1 * 2 = 2, а затем немедленно возвращаете r. Вместо этого вы хотите проверить, равен ли этот новый r переданному параметру. Если нет, то напечатайте r и пробел и продолжайте цикл. Если оно равно, то вывести итоговое число и вернуться из метода.

int r = 1;
do
{
    r = r*2;
    System.out.print(r + " ");
    if (r == k) return r;
}while(r <= k);
person Kon    schedule 05.07.2014