Java новичок: деление входного значения пополам с использованием al oop, но не может использовать массивы, встроенные процедуры сортировки или любые другие Java классы коллекций - PullRequest
0 голосов
/ 12 апреля 2020

Java Начинающий: у меня большая часть кода завершена, чтобы решить приведенную ниже проблему, но возникли проблемы с моим разделом l oop, так как в настоящее время он делит одно значение. Он должен продолжать делиться, пока не достигнет 1. Я не уверен, что не так, поэтому любая помощь очень ценится! Однако я не могу использовать массивы, встроенные процедуры сортировки или любые другие Java Классы коллекций

Проблема: Напишите программу, которая будет запрашивать у пользователя положительное целое число: N. Программа будет многократно делить ввод пополам используя al oop, отбрасывая любую дробную часть, пока она не станет равной 1. Программа должна печатать в отдельных строках:

  • последовательность значений «пополам», по одному на строку
  • необходимое количество итераций
  • значение log2 (N)

Мой код и вывод при вводе значения 9:

import stdlib.StdIn;
import stdlib.StdOut;

public class DS1hw1b {

    public static void main(String[] args) {

        int countIteration = 0;

        StdOut.println("enter a positive number: ");
        int N = StdIn.readInt();

        for (int i = 1; i <= 1; i++) {
            countIteration++;
            if ((N/2) != 1)
                StdOut.println(N/2);

            StdOut.println("number of iterations: " + countIteration);

    //compute log formula
            StdOut.println("log2 of input: " + (Math.log(N)/Math.log(2)));
        }
    }
}
Output:
enter a positive number: 
9
4
number of iterations: 1
log2 of input: 3.1699250014423126

Тем не менее, я должен видеть 9, 4, 2 и 1 на отдельных строках и итерации 3.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

За мой комментарий к @Murelink. Вот обновленный код, но теперь формула log2 отображается как 0.0 для любого введенного числа. Я думал, что будет лучше показать это так. Во всяком случае, я не понимаю, почему это не работает, так как я не изменил формулу. Спасибо всем за помощь!

publi c stati c void main (String [] args) {

    int countIteration = 0;

    StdOut.println("enter a positive number: ");
    int N = StdIn.readInt();

    while (N > 1) {
        N /= 2;
        countIteration++;
        StdOut.println(N);
    }
    StdOut.println("number of iterations: " + countIteration);

//compute log formula
    StdOut.println("log2 of input: " + (Math.log(N)/Math.log(2)));
}

}

0 голосов
/ 12 апреля 2020

Ваш l oop будет только l oop один раз - вы инициализируете i с 1, что соответствует условию i<=1, и прекращаете придерживаться его, как только i увеличивается.

Вас просят разделить N на 2 до тех пор, пока оно не станет 1 - это требует while l oop:

int counter = 0;
while (n > 1) {
    System.out.println(n);
    counter++;
    n /= 2;
}
System.out.println("Number of iterations: " + counter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...