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

1

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

Nevermind метод compute_odd, я все еще думаю об этом!

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

Напишите метод void, называемый select_function, который имеет параметр n типа int. Если значение n равно, метод будет вызывать метод compute_even, передавая ему значение параметра n, иначе метод вызовет метод compute_odd, передающий ему значение n.

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

compute_even: 2, 4, 8, 16, 32, 64, 128... до n

compute_odd: 1, 3, 6, 10, 15, 21, 28... до n

Напишите программу, в которой пользователь вводит число int 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)
{

}

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

  • 0
    Вам нужно распечатать все четные / нечетные числа от нуля до n1?
Теги:
methods
computation

2 ответа

0
Лучший ответ

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

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

  • 0
    Огромное спасибо, это действительно помогло мне понять это, но если вы прочитали упражнение, то попросите следующую последовательность «даже» 2, 4, 8, 16, 32, 64, 128 и т. Д. Благодаря вашему комментарию мне удалось чтобы получить это! Я только что заменил начальное значение r на 2, а сейчас делает r = r * 2
0

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

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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню