Задачка
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Задачка Expand / Collapse
Автор
Сообщение
22.08.2006 16:04
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.04.2008 19:27
Сообщ.: 182, Visits: 1 528
Здавствуйте.

Недавно мне подкинули задачку, надо решить её средствами java

В общем условие такое:

Есть две переменные i и k

надо задать им тип и проинициализировать так чтобы нижеследующий цикл стал бесконечным:

while (i<=k && k<=i && k!=i) {

// do somthing

}

вот, - я бился над этим, но так ничего не придумал.

Мне уже просто интересно - какое ж решение?

Сообщ. #903116
22.08.2006 18:18
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Именно в таком виде задача решения не имеет. Однако, давайте прислушаемся, как звучит условие?

Дано m и n. До тех пор, пока m не меньше n и n не меньше m, и m не равно n, выполнять...

А теперь запишем это условние на Java:
while (!(m > n) && !(n > m) && m != n)...

Инициализировав m и n либо Float.NaN, либо Double.NaN, условие = true.

=))
Сообщ. #903128
22.08.2006 18:40
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.04.2008 19:27
Сообщ.: 182, Visits: 1 528
ну честно говоря, мне дали задачу именно в том виде, в каком я её вам преподнес!
Сообщ. #903131
22.08.2006 20:19
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Не имеет решения.

Доказательство:
Операции <=, >= определены только на числах. Никаких объектов, никаких булевых значений. Условия m <= n и n <= n говорят о том, что числа должны быть равны. Пусть m = n = x. Единственное значение, прикотором x != x = true, это NaN. Однако, значение любого сравнения, кроме !=, в котором хотя бы один операнд NaN -- false.

Доказано.

В представленной постановке задача решений не имеет. Вероятно, человек выразил на Java словесную формулировку. В том виде, в каком он ее выразил, она решений не имеет. Однако, если за основу взять словесную формулировку, то она решена в предыдущем посте =))
Сообщ. #903138
23.08.2006 9:31
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 12.02.2008 12:50
Сообщ.: 52, Visits: 893
A можно ту эксплэйн , чем Float.NaN отличается от любого другого числа ,

Danissimo (22.08.2006)
Именно в таком виде задача решения не имеет. Однако, давайте прислушаемся, как звучит условие?

Дано m и n. До тех пор, пока m не меньше n и n не меньше m, и m не равно n, выполнять...

А теперь запишем это условние на Java:
while (!(m > n) && !(n > m) && m != n)...

Инициализировав m и n либо Float.NaN, либо Double.NaN, условие = true.

=))


всем yдачи
Сообщ. #903152
23.08.2006 9:41
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Конено =))
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#153654
Сообщ. #903155
15.08.2007 17:45
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.04.2008 19:27
Сообщ.: 182, Visits: 1 528
Вот ето да, - практически через год нашел ответ, - готовлюсь щас к SCJP(решился все таки:))))

Читал про wraper(ы) примитивов и долго не мог въехать в пример и его объяснения. Когда въехал то понял хде собака порылась:)

В общем вот решение(кто не верит, запустите под java 5):

        Integer i = 1000;
        Integer k = 1000;
        while (i<=k && k<=i && k!=i) {
            // dp something
        }

А вот вам объяснение:

Boxing, ==, and equals()

We just used == to do a little exploration of wrappers. Let's take a more thorough

look at how wrappers work with ==, !=, and equals(). We'll talk a lot more about

the equals() method in later chapters. For now all we have to know is that the

intention of the equals() method is to determine whether two instances of a given

class are "meaningfully equivalent." This definition is intentionally subjective; it's

up to the creator of the class to determine what "equivalent" means for objects of the

class in question. The API developers decided that for all the wrapper classes, two

objects are equal if they are of the same type and have the same value. It shouldn't

be surprising that

Integer i1 = 1000;

Integer i2 = 1000;

if(i1 != i2) System.out.println("different objects");

if(i1.equals(i2)) System.out.println("meaningfully equal");

Produces the output:

different objects

meaningfully equal

It's just two wrapper objects that happen to have the same value. Because they

have the same int value, the equals() method considers them to be "meaningfully

equivalent", and therefore returns true. How about this one:

Integer i3 = 10;

Integer i4 = 10;

if(i3 == i4) System.out.println("same object");

if(i3.equals(i4)) System.out.println("meaningfully equal");

This example produces the output:

same object

meaningfully equal

Yikes! The equals() method seems to be working, but what happened with ==

and != ? Why is != telling us that i1 and i2 are different objects, when == is saying

that i3 and i4 are the same object? In order to save memory, two instances of the

following wrapper objects will always be == when their primitive values are the same:

n Boolean

n Byte

n Character from \u0000 to \u007f (7f is 127 in decimal)

n Short and Integer from -128 to 127

Сообщ. #915356
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, mishgun, pl

Время GMT +3:00, Сейчас 8:49