Loopy Curse

Рубрика: Java, Задачки | 16 November 2007, 12:27 | juriy

Хоть задачка, приведенная ниже, и не моя, я просто не мог удержаться и не внести ее в блог, чтобы друзья тоже получили повод посушить голову.

Вопрос, как нужно проинициализировать i, чтобы цикл был бесконечным:

[java]

// initialize i so that loop is infinite
while (i == i + 1);

[/java]

Ответ опубликую в понедельник, если никто раньше не догадается :)

Вот и наступила новая неделя – задачку, конечно, решили.

Для первой задачи ответ такой:

[java]

double i = Double.POSITIVE_INFINITY;
while (i == i + 1);

[/java]

Если объяснять ответ просто: то получится что-то вроде следующего. Каков результат выражения “бесконечность + 1″, естественно, все та же “бесконечность”.

В действительности, даже бесконечности не надо: достаточно просто большого числа. К примеру 1e24. Достаточное условие того, что цикл бесконечен – Math.ulp(i) > 1

Если объяснять подробно, то можно отправить читателей на статью в Wiki.

Что касается второй задачки – я нашел два решения: с автобоксингом и без. Оба привожу ниже:

[java]

double a = Double.NaN;
double b = Double.NaN;

[/java]

[java]

double a = new Integer(1);
double b = new Integer(1);

[/java]

Комментариев: 7

7 Responses to “Loopy Curse”

Комментарии:

  1. Andy

    Решил :)

  2. Andy

    аналогичная задачка

    // initialize i so that loop is infinite
    while (a != b && !(a < b) && !(a > b))

  3. DimaT

    Готово :-)

  4. juriy

    Andy,

    Знаю как решить на java 1.5+. :-) Симпатишный паззл, спасибо, будет в коллекцию.

  5. DimaT

    > while (a != b && !(a < b) && !(a > b))

    Решил на java 1.4

  6. Chabster

    i должно быть достаточно большим реальным числом.

  7. dimat

    Отностиельно задачки: while (a != b && !(a b))

    Человеческие мысли уже давно вошли в этот цикл инициализировав переменные таким образом:
    a = new Egg();
    b = new Chicken();

Leave a Reply