﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Программирование / Java  / Задачка / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://www.relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Sat, 30 Aug 2008 04:30:04 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Задачка</title><link>http://www.relib.com/forums/Topic903116-5-1.aspx</link><description>Вот ето да, - практически через год нашел ответ, - готовлюсь щас к SCJP(решился все таки:))))&lt;/P&gt;&lt;P&gt;Читал про wraper(ы) примитивов и долго не мог въехать в пример и его объяснения. Когда въехал то понял хде собака порылась:) &lt;/P&gt;&lt;P&gt;В общем вот решение(кто не верит, запустите под java 5):&lt;/P&gt;&lt;P&gt;        Integer i = 1000;&lt;BR&gt;        Integer k = 1000;&lt;BR&gt;        while (i&amp;lt;=k &amp;amp;&amp;amp; k&amp;lt;=i &amp;amp;&amp;amp; k!=i) {&lt;BR&gt;            // dp something&lt;BR&gt;        }&lt;BR&gt;&lt;/P&gt;&lt;P&gt;А вот вам объяснение:&lt;/P&gt;&lt;B&gt;&lt;FONT face=GillSans-Bold&gt;&lt;P align=left&gt;Boxing, ==, and equals()&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;&lt;P align=left&gt;We just used == to do a little exploration of wrappers. Let's take a more thorough&lt;/P&gt;&lt;P align=left&gt;look at how wrappers work with ==, !=, and &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;equals()&lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;. We'll talk a lot more about&lt;/P&gt;&lt;P align=left&gt;the &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;equals() &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;method in later chapters. For now all we have to know is that the&lt;/P&gt;&lt;P align=left&gt;intention of the &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;equals() &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;method is to determine whether two instances of a given&lt;/P&gt;&lt;P align=left&gt;class are "meaningfully equivalent." This definition is intentionally subjective; it's&lt;/P&gt;&lt;P align=left&gt;up to the creator of the class to determine what "equivalent" means for objects of the&lt;/P&gt;&lt;P align=left&gt;class in question. The API developers decided that for all the wrapper classes, two&lt;/P&gt;&lt;P align=left&gt;objects are equal if they are of the same type and have the same value. It shouldn't&lt;/P&gt;&lt;P align=left&gt;be surprising that&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;&lt;P align=left&gt;Integer i1 = 1000;&lt;/P&gt;&lt;P align=left&gt;Integer i2 = 1000;&lt;/P&gt;&lt;P align=left&gt;if(i1 != i2) System.out.println("different objects");&lt;/P&gt;&lt;P align=left&gt;if(i1.equals(i2)) System.out.println("meaningfully equal");&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;&lt;P align=left&gt;Produces the output:&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;&lt;P align=left&gt;different objects&lt;/P&gt;&lt;P align=left&gt;meaningfully equal&lt;/FONT&gt;&lt;P align=left&gt;&lt;B&gt;&lt;FONT face=GillSans-ExtraBold size=4&gt;&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Goudy size=3&gt;&lt;P align=left&gt;It's just two wrapper objects that happen to have the same value. Because they&lt;/P&gt;&lt;P align=left&gt;have the same &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;int &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;value, the &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;equals() &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;method considers them to be "meaningfully&lt;/P&gt;&lt;P align=left&gt;equivalent", and therefore returns &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;true&lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;. How about this one:&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;&lt;P align=left&gt;Integer i3 = 10;&lt;/P&gt;&lt;P align=left&gt;Integer i4 = 10;&lt;/P&gt;&lt;P align=left&gt;if(i3 == i4) System.out.println("same object");&lt;/P&gt;&lt;P align=left&gt;if(i3.equals(i4)) System.out.println("meaningfully equal");&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;&lt;P align=left&gt;This example produces the output:&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;&lt;P align=left&gt;same object&lt;/P&gt;&lt;P align=left&gt;meaningfully equal&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;&lt;P align=left&gt;Yikes! The &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;equals() &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;method seems to be working, but what happened with ==&lt;/P&gt;&lt;P align=left&gt;and != ? Why is != telling us that &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;i1 &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;and &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;i2 &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;are different objects, when == is saying&lt;/P&gt;&lt;P align=left&gt;that &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;i3 &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;and &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;i4 &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;are the same object? In order to save memory, two instances of the&lt;/P&gt;&lt;P align=left&gt;following wrapper objects will always be == when their primitive values are the same:&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=ZapfDingbats color=#666666 size=2&gt;&lt;P align=left&gt;n &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;&lt;FONT color=#000000&gt;Boolean&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=ZapfDingbats color=#666666 size=2&gt;&lt;P align=left&gt;n &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;&lt;FONT color=#000000&gt;Byte&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=ZapfDingbats color=#666666 size=2&gt;&lt;P align=left&gt;n &lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Courier size=1&gt;Character &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;from \u0000 to \u007f (7f is 127 in decimal)&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=ZapfDingbats color=#666666 size=2&gt;&lt;P align=left&gt;n &lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Courier size=1&gt;Short &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;and &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;Integer &lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;from &lt;/FONT&gt;&lt;FONT face=Courier size=1&gt;-&lt;/FONT&gt;&lt;FONT face=Goudy size=3&gt;128 to 127&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;</description><pubDate>Wed, 15 Aug 2007 17:45:25 GMT</pubDate><dc:creator>Alexadr</dc:creator></item><item><title>RE: Задачка</title><link>http://www.relib.com/forums/Topic903116-5-1.aspx</link><description>Конено =))&lt;br&gt;http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#153654</description><pubDate>Wed, 23 Aug 2006 09:41:16 GMT</pubDate><dc:creator>Danissimo</dc:creator></item><item><title>RE: Задачка</title><link>http://www.relib.com/forums/Topic903116-5-1.aspx</link><description>A можно ту эксплэйн , чем Float.NaN отличается от любого другого числа ,&lt;/P&gt;&lt;P&gt;[quote][b]Danissimo (22.08.2006)[/b][hr]Именно в таком виде задача решения не имеет. Однако, давайте прислушаемся, как звучит условие?&lt;BR&gt;&lt;BR&gt;Дано m и n. До тех пор, пока m не меньше n и n не меньше m, и m не равно n, выполнять...&lt;BR&gt;&lt;BR&gt;А теперь запишем это условние на Java:&lt;BR&gt;while (!(m &amp;gt; n) &amp;amp;&amp;amp; !(n &amp;gt; m) &amp;amp;&amp;amp; m != n)...&lt;BR&gt;&lt;BR&gt;Инициализировав m и n либо Float.NaN, либо Double.NaN, условие = true.&lt;BR&gt;&lt;BR&gt;=))[/quote]</description><pubDate>Wed, 23 Aug 2006 09:31:38 GMT</pubDate><dc:creator>sergioK</dc:creator></item><item><title>RE: Задачка</title><link>http://www.relib.com/forums/Topic903116-5-1.aspx</link><description>Не имеет решения.&lt;br&gt;&lt;br&gt;Доказательство:&lt;br&gt;Операции &amp;lt;=, &gt;= определены только на числах. Никаких объектов, никаких булевых значений. Условия m &amp;lt;= n и n &amp;lt;= n говорят о том, что числа должны быть равны. Пусть m = n = x. Единственное значение, прикотором x != x = true, это NaN. Однако, значение любого сравнения, кроме !=, в котором хотя бы один операнд NaN -- false.&lt;br&gt;&lt;br&gt;Доказано.&lt;br&gt;&lt;br&gt;В представленной постановке задача решений не имеет. Вероятно, человек выразил на Java словесную формулировку. В том виде, в каком он ее выразил, она решений не имеет. Однако, если за основу взять словесную формулировку, то она решена в предыдущем посте =))</description><pubDate>Tue, 22 Aug 2006 20:19:24 GMT</pubDate><dc:creator>Danissimo</dc:creator></item><item><title>RE: Задачка</title><link>http://www.relib.com/forums/Topic903116-5-1.aspx</link><description>ну честно говоря, мне дали задачу именно в том виде, в каком я её вам преподнес!</description><pubDate>Tue, 22 Aug 2006 18:40:34 GMT</pubDate><dc:creator>Alexadr</dc:creator></item><item><title>RE: Задачка</title><link>http://www.relib.com/forums/Topic903116-5-1.aspx</link><description>Именно в таком виде задача решения не имеет. Однако, давайте прислушаемся, как звучит условие?&lt;br&gt;&lt;br&gt;Дано m и n. До тех пор, пока m не меньше n и n  не меньше m, и m не равно n, выполнять...&lt;br&gt;&lt;br&gt;А теперь запишем это условние на Java:&lt;br&gt;while (!(m &gt; n) &amp;&amp; !(n &gt; m) &amp;&amp; m != n)...&lt;br&gt;&lt;br&gt;Инициализировав m и n либо Float.NaN, либо Double.NaN, условие = true.&lt;br&gt;&lt;br&gt;=))</description><pubDate>Tue, 22 Aug 2006 18:18:35 GMT</pubDate><dc:creator>Danissimo</dc:creator></item><item><title>Задачка</title><link>http://www.relib.com/forums/Topic903116-5-1.aspx</link><description>Здавствуйте.&lt;/P&gt;&lt;P&gt;Недавно мне подкинули задачку, надо решить её средствами java&lt;/P&gt;&lt;P&gt;В общем условие такое:&lt;/P&gt;&lt;P&gt;Есть две переменные i и k&lt;/P&gt;&lt;P&gt;надо задать им тип и проинициализировать так чтобы нижеследующий цикл стал бесконечным:&lt;/P&gt;&lt;P&gt;while (i&amp;lt;=k &amp;amp;&amp;amp; k&amp;lt;=i &amp;amp;&amp;amp; k!=i) {&lt;/P&gt;&lt;P&gt;  // do somthing&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;вот, - я бился над этим, но так ничего не придумал.&lt;/P&gt;&lt;P&gt;Мне уже просто интересно - какое ж решение?</description><pubDate>Tue, 22 Aug 2006 16:04:30 GMT</pubDate><dc:creator>Alexadr</dc:creator></item></channel></rss>