|
|
|
Supreme Being
      
участник
Last Login: 01.04.2008 19:27
Сообщ.: 182,
Visits: 1 528
|
|
| Здавствуйте. Недавно мне подкинули задачку, надо решить её средствами java В общем условие такое: Есть две переменные i и k надо задать им тип и проинициализировать так чтобы нижеследующий цикл стал бесконечным: while (i<=k && k<=i && k!=i) { // do somthing } вот, - я бился над этим, но так ничего не придумал. Мне уже просто интересно - какое ж решение?
|
|
|
|
|
Supreme 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.
=))
|
|
|
|
|
Supreme Being
      
участник
Last Login: 01.04.2008 19:27
Сообщ.: 182,
Visits: 1 528
|
|
| ну честно говоря, мне дали задачу именно в том виде, в каком я её вам преподнес!
|
|
|
|
|
Supreme 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 словесную формулировку. В том виде, в каком он ее выразил, она решений не имеет. Однако, если за основу взять словесную формулировку, то она решена в предыдущем посте =))
|
|
|
|
|
Forum 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дачи
|
|
|
|
|
Supreme 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
|
|
|
|
|
Supreme 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 aboutthe equals() method in later chapters. For now all we have to know is that theintention of the equals() method is to determine whether two instances of a givenclass 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 "meaningfullyequivalent", 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 sayingthat i3 and i4 are the same object? In order to save memory, two instances of thefollowing wrapper objects will always be == when their primitive values are the same: n Booleann Byten Character from \u0000 to \u007f (7f is 127 in decimal)n Short and Integer from -128 to 127
|
|
|
|