#java #methods #computation
#java #методы #вычисление
Вопрос:
У меня возникли некоторые проблемы с пониманием того, как я должен выполнять метод compute_even в этом упражнении, я надеюсь, что кто-нибудь сможет мне помочь.
Не обращайте внимания на метод compute_odd, я все еще думаю об этом!
Вот упражнение:
Напишите метод void с именем choose_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
Напишите программу, в которой пользователь вводит целое число 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)
{
}
сильный текст
Комментарии:
1. Вам нужно печатать все четные / нечетные числа от нуля до n1?
Ответ №1:
Попробуйте этот код
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
Комментарии:
1. Огромное спасибо, это действительно помогло мне понять это, но если вы прочитаете упражнение, то спросите следующую последовательность «даже» 2, 4, 8, 16, 32, 64, 128 и т.д… Благодаря вашему комментарию мне удалось это получить! Я только что заменил начальное значение r на 2, и в то время как теперь r = r * 2
Ответ №2:
Проблема здесь.
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);