<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6232182874900860400</id><updated>2011-11-05T02:32:05.328-07:00</updated><category term='while'/><category term='c#'/><category term='divide and conquer'/><category term='for'/><category term='java'/><category term='pupil detection'/><category term='binary search'/><category term='tips'/><category term='programming'/><category term='coding'/><category term='fifteenpuzzle'/><category term='code optimization'/><category term='n puzzle'/><category term='code'/><category term='project'/><category term='game'/><category term='loop unrolling'/><category term='distributed computing'/><category term='recursion'/><title type='text'>Anil Madamala</title><subtitle type='html'>computer programming
&lt;br&gt;
Please feel free to &lt;a href="mailto:amadamala@gmail.com"&gt;&lt;u&gt;mail me&lt;/u&gt;&lt;/a&gt; suggestions.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-6609325985503206506</id><published>2010-04-29T19:57:00.001-07:00</published><updated>2010-04-29T20:06:16.851-07:00</updated><title type='text'>Simple application to Send and Receive Files</title><content type='html'>&lt;div class="posterous_autopost"&gt;       &lt;div style="padding: 5px 5px 10px 5px; margin-top: 5px; border: 1px solid #ddd; background-color: #fff;line-height: 16px;"&gt;       &lt;div style="float: left; margin-right: 5px; overflow: visible;"&gt;&lt;a href="http://posterous.com/getfile/files.posterous.com/amadamala/IO9laksQ8VKeADOkEpRQuMGAOGixwHh9howzNWMUk2q7B2C1h3kT4nfQ6tfG/SendAndReceive.pdf" style="color: #bc7134;"&gt;&lt;img src="http://posterous.com/images/filetypes/pdf.png" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;       &lt;div style="font-size: 10px; color: #424037;line-height: 16px;"&gt;Download now or &lt;a href="http://amadamala.posterous.com/simple-application-to-send-and-receive-files" style="color: #bc7134;"&gt;preview on posterous&lt;/a&gt;&lt;/div&gt;       &lt;b&gt;&lt;a href="http://posterous.com/getfile/files.posterous.com/amadamala/IO9laksQ8VKeADOkEpRQuMGAOGixwHh9howzNWMUk2q7B2C1h3kT4nfQ6tfG/SendAndReceive.pdf" style="color: #bc7134;"&gt;SendAndReceive.pdf&lt;/a&gt;&lt;/b&gt; &lt;span style=" ;font-size:10px;color:#424037;"&gt;(268 KB)&lt;/span&gt;        &lt;/div&gt;      &lt;p&gt;My way of sending files is very odd. &lt;/p&gt;&lt;div&gt;I use following ways to send files.&lt;/div&gt;&lt;div&gt;- Picasa, Amazon S3 cloud, Email, Chat, Youtube, etc.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;In order to send/receive files I created a simple mock-up.&lt;/div&gt; &lt;div&gt;Implemented it in Java using Amazon S3 cloud service, JetS3t framework.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;I will build a web page whenever I get some time.&lt;/div&gt;&lt;div&gt;Feel free to comment about it.&lt;/div&gt;&lt;div&gt;-- Anil&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com/"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://amadamala.posterous.com/simple-application-to-send-and-receive-files"&gt;Anil Madamala's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-6609325985503206506?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/6609325985503206506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=6609325985503206506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/6609325985503206506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/6609325985503206506'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2010/04/simple-application-to-send-and-receive.html' title='Simple application to Send and Receive Files'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-8594415202861817303</id><published>2010-04-13T12:04:00.001-07:00</published><updated>2010-04-13T12:04:34.018-07:00</updated><title type='text'>Untitled</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;p&gt;&lt;a href="http://www.google.com/profiles/amadamala" class="google-buzz-button" title="Follow on Google Buzz" target="_blank"&gt;Follow on Buzz&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Testing the buzz button.&lt;/p&gt;   &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://amadamala.posterous.com/16202905"&gt;Anil Madamala's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-8594415202861817303?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/8594415202861817303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=8594415202861817303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/8594415202861817303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/8594415202861817303'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2010/04/untitled.html' title='Untitled'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-4690194189332256099</id><published>2010-03-17T10:38:00.001-07:00</published><updated>2010-03-17T23:15:26.146-07:00</updated><title type='text'>Invictus</title><content type='html'>&lt;div class="posterous_autopost"&gt;&lt;div style="color: rgb(51, 51, 51); font-family: Arial; font-size: 10px;"&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; I am the Master of my Fate,&lt;br /&gt;I am the Captain of my Soul&lt;/span&gt;&lt;/blockquote&gt;&lt;p class="cite" style=""&gt; - W.C. Henley&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com/"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://amadamala.posterous.com/invictus-88"&gt;amadamala's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-4690194189332256099?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/4690194189332256099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=4690194189332256099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/4690194189332256099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/4690194189332256099'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2010/03/invictus.html' title='Invictus'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-2440406834301578798</id><published>2010-03-16T13:42:00.001-07:00</published><updated>2010-04-13T11:59:27.058-07:00</updated><title type='text'>At first it’s simple, then it gets complicated and simple again</title><content type='html'>&lt;div class="posterous_autopost"&gt;&lt;p&gt;&lt;span style="   line-height: 25px;font-family:apolline-1, apolline-2, Lucida Grande, Arial, Helvetica, sans-serif;font-size:18px;color:#777777;"&gt;  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: 21px;"&gt;  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;When you start looking at a problem and it seems really simple, you don’t really understand the complexity of the problem.&lt;/p&gt;  &lt;p&gt;Then you get into the problem, and you see that it’s really complicated, and you come up with all these convoluted solutions. That’s sort of the middle, and that’s where most people stop…&lt;/p&gt;  &lt;p&gt;But the really great person will keep on going and find the key, the underlying principle of the problem – and come up with an elegant, really beautiful solution that works. That’s what we wanted to do with Mac.&lt;/p&gt;  &lt;p&gt;Steve Jobs, 1984, taken from Peter Merholz’ book “Subject to Change”&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Since it is great quote, I entirely copied and pasted the text from the following link.&lt;/p&gt; &lt;p&gt;&lt;a href="http://mortenjust.com/2009/07/20/at-first-its-simple-then-it-gets-complicated-and-simple-again/"&gt;http://mortenjust.com/2009/07/20/at-first-its-simple-then-it-gets-complicated-and-simple-again/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com/"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://amadamala.posterous.com/at-first-its-simple-then-it-gets-complicated"&gt;amadamala's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-2440406834301578798?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/2440406834301578798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=2440406834301578798' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/2440406834301578798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/2440406834301578798'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2010/03/at-first-its-simple-then-it-gets.html' title='At first it’s simple, then it gets complicated and simple again'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-3851542447114368130</id><published>2010-03-07T16:46:00.001-08:00</published><updated>2010-03-17T23:16:08.784-07:00</updated><title type='text'>Idea to develop a smart phone applcation (Useful for India like couctr)</title><content type='html'>&lt;div class="posterous_autopost"&gt;&lt;div&gt;&lt;a href="http://www.hindu.com/2005/08/10/stories/2005081002160400.htm"&gt;http://www.hindu.com/2005/08/10/stories/2005081002160400.htm&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Do to want to make difference in peoples life with technology? I do.&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;div&gt;Say 5% of people in urban India have GPS enabled phones (iphone, nokia, android etc). &lt;/div&gt;&lt;div&gt;You wrote an application to report manholes. &lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;Whenever you find your-selfs next to the to a manhole &lt;/div&gt; &lt;div&gt;- Open the application and press to report the location to government  which is responsible    for this.&lt;/div&gt;&lt;div&gt;- If they don't care, report it to news papers. I'm sure they are happy to spread the news.&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;div&gt;Let me show the idea with pictures. &lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;If you willing to see the flow of the application, please download the pdf file. You can even navigate the prototype.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;If you like to implement the idea let me know, I will be happy to help you to design the application.&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;div&gt;Best regards,&lt;/div&gt;&lt;div&gt;-- Anil&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/amadamala/5i0QOiz8B4cJaTPrCIf3RfzI1bTgb81ND7v3UmM3LUBBt8cXI3mGkOti4l3x/3.png" width="282" height="510" /&gt; &lt;img src="http://posterous.com/getfile/files.posterous.com/amadamala/p8MkCRn8GspxaBG1BJNzlszsTqlIwcdfEHx0m4iugNYlUDNIqPqgnzbVh7Vs/2.png" width="282" height="510" /&gt; &lt;img src="http://posterous.com/getfile/files.posterous.com/amadamala/ntZnneuTVQFzHzRoHWKtumHgDsobMRKCFFReOyFKaZwWFI5YO58rmvjujUuo/1.png" width="282" height="510" /&gt; &lt;/p&gt;&lt;div&gt;&lt;a href="http://amadamala.posterous.com/idea-to-develop-a-smart-phone-applcation-usef"&gt;See and download the full gallery on posterous&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;       &lt;/p&gt;&lt;div style="padding: 5px 5px 10px 5px; margin-top: 5px; border: 1px solid #ddd; background-color: #fff;line-height: 16px;"&gt;       &lt;div style="float: left; margin-right: 5px; overflow: visible;"&gt;&lt;a href="http://posterous.com/getfile/files.posterous.com/amadamala/CSDI4sTK2cNyPSNIhGEom5RciaEEJcklKW13qNFwm2M7fQjvoICbMeoQigfn/myBalsamiqProject.pdf" style="color: #bc7134;"&gt;&lt;img src="http://posterous.com/images/filetypes/pdf.png" style="border: none;" /&gt;&lt;/a&gt;&lt;/div&gt;       &lt;div style="font-size: 10px; color: #424037;line-height: 16px;"&gt;Download now or &lt;a href="http://amadamala.posterous.com/idea-to-develop-a-smart-phone-applcation-usef" style="color: #bc7134;"&gt;preview on posterous&lt;/a&gt;&lt;/div&gt;       &lt;b&gt;&lt;a href="http://posterous.com/getfile/files.posterous.com/amadamala/CSDI4sTK2cNyPSNIhGEom5RciaEEJcklKW13qNFwm2M7fQjvoICbMeoQigfn/myBalsamiqProject.pdf" style="color: #bc7134;"&gt;myBalsamiqProject.pdf&lt;/a&gt;&lt;/b&gt; &lt;span style=" ;font-size:10px;color:#424037;"&gt;(219 KB)&lt;/span&gt;        &lt;/div&gt;      &lt;p&gt;&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com/"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://amadamala.posterous.com/idea-to-develop-a-smart-phone-applcation-usef"&gt;amadamala's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-3851542447114368130?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/3851542447114368130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=3851542447114368130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/3851542447114368130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/3851542447114368130'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2010/03/idea-to-develop-smart-phone-applcation.html' title='Idea to develop a smart phone applcation (Useful for India like couctr)'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-901913569859078745</id><published>2010-02-11T15:34:00.001-08:00</published><updated>2010-02-11T15:34:12.802-08:00</updated><title type='text'>Chrome Browser pinned tab tip.</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div&gt;I don&amp;#39;t know about following feature of google chrome.&lt;/div&gt;&lt;p /&gt;&lt;div&gt;If you use google chrome you might already know about how to use pinned tabs. &lt;/div&gt;&lt;div&gt;Which gives extra space for other tabs. The pinned tab automatically goes to the left side on tab bar.&lt;/div&gt; &lt;div&gt;I use them for websites I use most. Examples are Google mail, calender, docs, facebook, twitter etc.&lt;/div&gt;&lt;p /&gt;&lt;div&gt;If you drag and drop the regular tab in between or left side of pinned tabs it automatically becomes pinned tab.&lt;/div&gt; &lt;div&gt;I don&amp;#39;t know about it, found it accedentally.&lt;/div&gt;&lt;p /&gt;&lt;div&gt;-- Anil&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://amadamala.posterous.com/chrome-browser-pinned-tab-tip"&gt;amadamala's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-901913569859078745?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/901913569859078745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=901913569859078745' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/901913569859078745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/901913569859078745'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2010/02/chrome-browser-pinned-tab-tip.html' title='Chrome Browser pinned tab tip.'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-5882438050211573228</id><published>2010-02-08T17:03:00.001-08:00</published><updated>2010-02-08T17:03:40.580-08:00</updated><title type='text'>Get Latitude and Longitude values from Google Maps</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;div&gt;Search your address in google maps. Once you found your address in maps use the following Java script to get the longitude and latitude.&lt;/div&gt;&lt;div&gt;&lt;b&gt;javascript:void(prompt(&amp;#39;&amp;#39;,gApplication.getMap().getCenter())); &lt;span style="font-weight: normal;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/div&gt; &lt;p /&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-weight: normal;"&gt;You will get popup with geo-coordinates.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt; During day to day hobby programming stuff I used it many times.&lt;/div&gt;&lt;p /&gt;&lt;div&gt;Source:&lt;a href="http://lifehacker.com/267361/how-to-find-latitude-and-longitude"&gt; LifeHacker&lt;/a&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://amadamala.posterous.com/get-latitude-and-longitude-values-from-google"&gt;amadamala's posterous&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-5882438050211573228?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/5882438050211573228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=5882438050211573228' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/5882438050211573228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/5882438050211573228'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2010/02/get-latitude-and-longitude-values-from.html' title='Get Latitude and Longitude values from Google Maps'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-7120007478479528064</id><published>2009-03-06T14:51:00.001-08:00</published><updated>2009-03-06T15:29:00.377-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='pupil detection'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Pupil detection in a video [C# and Java]</title><content type='html'>I just want to post the output of the project I worked with my friend long time ago.&lt;br /&gt;&lt;br /&gt;The project is about finding the eye pupil detection. We did it for both image and also for the video[webcam].&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=qZCAX4SqCko"&gt;Here&lt;/a&gt; is the video output of the project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/qZCAX4SqCko&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/qZCAX4SqCko&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;-- Anil&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-7120007478479528064?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/7120007478479528064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=7120007478479528064' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/7120007478479528064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/7120007478479528064'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2009/03/pupil-detection-in-video-c-and-java.html' title='Pupil detection in a video [C# and Java]'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-1429315076853562672</id><published>2008-09-18T19:47:00.000-07:00</published><updated>2008-10-22T16:05:13.184-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recursion'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Recursion</title><content type='html'>&lt;p&gt;I found it very useful to explain the recursion. I read it at &lt;a title="http://everything2.com/index.pl?node_id=477013" target="_blank" href="http://everything2.com/index.pl?node_id=477013" id="z78:"&gt;everything2.com.&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;A &lt;a title="child" href="http://everything2.com/title/child" class="populated"&gt;child&lt;/a&gt; couldn't sleep, so her mother told her a story about &lt;a title="a little frog" href="http://everything2.com/title/a%2520little%2520frog" class="populated"&gt;a little frog&lt;/a&gt;,&lt;br /&gt;      who couldn't sleep, so the frog's mother told her a story about &lt;a title="a little bear" href="http://everything2.com/title/a%2520little%2520bear" class="populated"&gt;a little bear&lt;/a&gt;,&lt;br /&gt;      who couldn't sleep, so the bear's mother told her a story about a little weasel...&lt;br /&gt;          who fell asleep.&lt;br /&gt;        ...and the &lt;a title="little bear" href="http://everything2.com/title/little%2520bear" class="populated"&gt;little bear&lt;/a&gt; fell asleep;&lt;br /&gt;    ...and the &lt;a title="little frog" href="http://everything2.com/title/little%2520frog" class="populated"&gt;little frog&lt;/a&gt; fell asleep;&lt;br /&gt;...and the &lt;a title="child" href="http://everything2.com/title/child" class="populated"&gt;child&lt;/a&gt; fell asleep.&lt;br /&gt;&lt;br /&gt;This is the best explanation of recursion I've heard. It could probably&lt;br /&gt;be recast to be less cutesy, but it really gets to what's &lt;i&gt;going on&lt;/i&gt; with recursion in a very nice way: Stuff happens on the way in, you hit an &lt;a title="endpoint" href="http://everything2.com/title/endpoint" class="populated"&gt;endpoint&lt;/a&gt;, and other stuff happens in reverse order on the way back out as it all &lt;a title="unwind" href="http://everything2.com/title/unwind" class="populated"&gt;unwind&lt;/a&gt;s.  For somebody who doesn't "get" recursion yet, this is not a bad map to start with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-1429315076853562672?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/1429315076853562672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=1429315076853562672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/1429315076853562672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/1429315076853562672'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/09/i-found-it-very-useful-to-explain-about.html' title='Recursion'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-5328512634458726719</id><published>2008-08-27T00:45:00.000-07:00</published><updated>2008-09-18T11:45:58.636-07:00</updated><title type='text'>Tricky Java Code</title><content type='html'>&lt;h3 style="font-weight: normal;" id="wgea"&gt;&lt;u id="x6to"&gt;Java class without main method:&lt;/u&gt;&lt;/h3&gt; &lt;pre id="md-h3"&gt;&lt;span id="md-h4" class="literal"&gt;class&lt;/span&gt; Main&lt;br id="md-h5"&gt;{&lt;br id="md-h6"&gt;    &lt;span id="md-h7" class="literal"&gt;static&lt;/span&gt;&lt;br id="md-h8"&gt;    {&lt;br id="md-h10"&gt;        System.out.println(&lt;span id="md-h11" class="character"&gt;"&lt;/span&gt;&lt;span id="md-h12" class="character"&gt;This java program have run without the run method&lt;/span&gt;&lt;span id="md-h13" class="character"&gt;"&lt;/span&gt;);&lt;br id="md-h14"&gt;        System.exit(0);&lt;br id="md-h15"&gt;    }&lt;br id="md-h16"&gt;}&lt;br id="lnrl"&gt;&lt;/pre&gt;&lt;h3 id="m452"&gt;&lt;u style="font-weight: normal;" id="x6to0"&gt;Java syntax quirk:&lt;/u&gt;&lt;br id="m4520"&gt; &lt;/h3&gt;   &lt;pre id="x6to1"&gt;&lt;span id="x6to2" class="literal"&gt;public&lt;/span&gt; &lt;span id="x6to3" class="literal"&gt;class&lt;/span&gt; Oddity&lt;br id="x6to4"&gt;{&lt;br id="x6to5"&gt;    &lt;span id="x6to6" class="literal"&gt;public&lt;/span&gt; &lt;span id="x6to7" class="literal"&gt;static&lt;/span&gt; &lt;span id="x6to8" class="literal"&gt;void&lt;/span&gt; main(String[] args)&lt;br id="x6to9"&gt;    {&lt;br id="x6to10"&gt;        http:&lt;span id="x6to11" class="comment"&gt;//amadamala.blogger.com&lt;/span&gt;&lt;br id="x6to12"&gt;        System.out.println(&lt;span id="x6to13" class="character"&gt;"&lt;/span&gt;&lt;span id="x6to14" class="character"&gt;Why is the URL allowed above?&lt;/span&gt;&lt;span id="x6to15" class="character"&gt;"&lt;/span&gt;);&lt;br id="x6to16"&gt;    }&lt;br id="x6to17"&gt;}&lt;br id="x6to18"&gt;&lt;code id="fo33"&gt;&lt;br id="fo330"&gt;Ans:   &lt;br id="fo331"&gt;----&lt;br id="fo332"&gt;&lt;/code&gt;&lt;code id="fo333"&gt; &lt;a id="fo334" href="http://blog.uncommons.org/" target="_blank"&gt;http://amadamala.blogger.com&lt;/a&gt; ==   lable : // comment here&lt;br id="fo335"&gt;                                     |              |&lt;br id="fo336"&gt;                                     |              |&lt;br id="sez5"&gt;                                     v              v &lt;br id="tddp"&gt;                                   http:         //amadamala.blogger.com             &lt;br id="tddp1"&gt;&lt;br id="tddp2"&gt;&lt;br id="q-l."&gt;References:&lt;br id="gzvr"&gt;[1] http://www.java-tips.org/&lt;br id="j9ia"&gt;[2] http://www.javapuzzlers.com/&lt;br id="v:6_"&gt;&lt;br id="v:6_0"&gt;&lt;br id="fo337"&gt;&lt;/code&gt;&lt;/pre&gt; &lt;br id="vubb"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-5328512634458726719?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/5328512634458726719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=5328512634458726719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/5328512634458726719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/5328512634458726719'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/08/tricky-java-code-java-class-without.html' title='Tricky Java Code'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-3157476665496931582</id><published>2008-07-07T17:53:00.000-07:00</published><updated>2008-10-10T23:19:33.696-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='n puzzle'/><category scheme='http://www.blogger.com/atom/ns#' term='fifteenpuzzle'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>FifteenPuzzle Game :: SourceCode</title><content type='html'>&lt;h1 id="cdsf"&gt;&lt;span style=" font-weight: normal; line-height: 19px"&gt;&lt;font size="2"&gt;I'm posting the code of a game that I wrote recently. Game name is &lt;/font&gt;&lt;a href="http://en.wikipedia.org/wiki/N-puzzle" id="nmzx" title="FifteenPuzzle" target="_blank"&gt;&lt;font size="2"&gt;FifteenPuzzle&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; or N-Puzzle.&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;&lt;br /&gt;&lt;h1 id="cdsf"&gt;&lt;span style=" font-weight: normal; line-height: 19px"&gt;&lt;font size="2"&gt;You can download the file &lt;/font&gt;&lt;a id="cejn" href="http://s3.madamala.com/code/FifteenPuzzle.java" target="_blank" title="FifteenPuzzle.java"&gt;&lt;font size="3"&gt;here.&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 id="cdsf"&gt;&lt;span style=" font-weight: normal; line-height: 19px"&gt;&lt;font size="2"&gt;File Name: &lt;/font&gt;&lt;a id="uvt3" href="http://s3.madamala.com/code/FifteenPuzzle.java" target="_blank" title="download"&gt;&lt;font size="3"&gt;FifteenPuzzle.java&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;div&gt;&lt;div id="nlfx"&gt;&lt;br /&gt;&lt;table id="qxx4" height="49" width="76" bgcolor="#cccccc" border="1" bordercolor="#6aa84f" cellpadding="3" cellspacing="0"&gt;&lt;tbody id="nlfx0"&gt;&lt;br /&gt;&lt;tr id="nlfx1"&gt;&lt;br /&gt;&lt;td id="nlfx2" width="100%"&gt;&lt;br /&gt;&lt;pre id="qg063"&gt;&lt;span id="qg064" class="keyword-directive"&gt;&lt;/span&gt;&lt;span id="qg067" class="keyword-directive"&gt;import&lt;/span&gt; java.awt.*;&lt;br id="qg068"&gt;&lt;span id="qg069" class="keyword-directive"&gt;import&lt;/span&gt; java.awt.event.*;&lt;br id="qg0610"&gt;&lt;span id="qg0611" class="keyword-directive"&gt;import&lt;/span&gt; javax.swing.*;&lt;br id="qg0612"&gt;&lt;span id="qg0613" class="keyword-directive"&gt;import&lt;/span&gt; java.util.ArrayList;&lt;br id="qg0614"&gt;&lt;span id="qg0615" class="keyword-directive"&gt;import&lt;/span&gt; java.util.Arrays;&lt;br id="qg0616"&gt;&lt;span id="qg0617" class="keyword-directive"&gt;import&lt;/span&gt; java.util.Collections;&lt;br id="qg0618"&gt;&lt;br id="qg0619"&gt;&lt;span id="qg0620" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg0621"&gt;&lt;span id="qg0622" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg0623" class="comment"&gt;It&lt;/span&gt; &lt;span id="qg0624" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg0625" class="comment"&gt;a&lt;/span&gt; &lt;span id="qg0626" class="comment"&gt;sliding&lt;/span&gt; &lt;span id="qg0627" class="comment"&gt;puzzle&lt;/span&gt; &lt;span id="qg0628" class="comment"&gt;that&lt;/span&gt; &lt;span id="qg0629" class="comment"&gt;consists&lt;/span&gt; &lt;span id="qg0630" class="comment"&gt;of&lt;/span&gt; &lt;span id="qg0631" class="comment"&gt;a&lt;/span&gt; &lt;span id="qg0632" class="comment"&gt;grid&lt;/span&gt; &lt;span id="qg0633" class="comment"&gt;of&lt;/span&gt; &lt;span id="qg0634" class="comment"&gt;numbered&lt;/span&gt; &lt;span id="qg0635" class="comment"&gt;squares&lt;/span&gt; &lt;br id="qg0636"&gt;&lt;span id="qg0637" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg0638" class="comment"&gt;with&lt;/span&gt; &lt;span id="qg0639" class="comment"&gt;one&lt;/span&gt; &lt;span id="qg0640" class="comment"&gt;square&lt;/span&gt; &lt;span id="qg0641" class="comment"&gt;missing&lt;/span&gt;&lt;span id="qg0642" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg0643" class="comment"&gt;and&lt;/span&gt; &lt;span id="qg0644" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg0645" class="comment"&gt;labels&lt;/span&gt; &lt;span id="qg0646" class="comment"&gt;on&lt;/span&gt; &lt;span id="qg0647" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg0648" class="comment"&gt;squares&lt;/span&gt; &lt;span id="qg0649" class="comment"&gt;jumbled&lt;/span&gt; &lt;span id="qg0650" class="comment"&gt;up&lt;/span&gt;&lt;br id="qg0651"&gt;&lt;span id="qg0652" class="comment"&gt; *  &lt;/span&gt;&lt;br id="qg0653"&gt;&lt;span id="qg0654" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg0655" class="ST0"&gt;&amp;lt;p&gt;&lt;/span&gt; &lt;span id="qg0656" class="comment"&gt;The&lt;/span&gt; &lt;span id="qg0657" class="ST0"&gt;&amp;lt;code&gt;&lt;/span&gt;&lt;span id="qg0658" class="ST0"&gt;&amp;lt;b&gt;&lt;/span&gt;&lt;span id="qg0659" class="comment"&gt;n&lt;/span&gt;&lt;span id="qg0660" class="comment"&gt;-&lt;/span&gt;&lt;span id="qg0661" class="comment"&gt;puzzle&lt;/span&gt;&lt;span id="qg0662" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg0663" class="ST0"&gt;&amp;lt;/code&gt;&lt;/span&gt; &lt;span id="qg0664" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg0665" class="comment"&gt;known&lt;/span&gt; &lt;span id="qg0666" class="comment"&gt;in&lt;/span&gt; &lt;span id="qg0667" class="comment"&gt;various&lt;/span&gt; &lt;span id="qg0668" class="comment"&gt;versions&lt;/span&gt;&lt;span id="qg0669" class="comment"&gt;, &lt;/span&gt;&lt;br id="qg0670"&gt;&lt;span id="qg0671" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg0672" class="comment"&gt;including&lt;/span&gt; &lt;span id="qg0673" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg0674" class="ST0"&gt;&amp;lt;code&gt;&lt;/span&gt;&lt;span id="qg0675" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg0676" class="comment"&gt;8 &lt;/span&gt;&lt;span id="qg0677" class="comment"&gt;puzzle&lt;/span&gt;&lt;span id="qg0678" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg0679" class="comment"&gt;the&lt;/span&gt;&lt;span id="qg0680" class="comment"&gt; 15 &lt;/span&gt;&lt;span id="qg0681" class="comment"&gt;puzzle&lt;/span&gt;&lt;span id="qg0682" class="ST0"&gt;&amp;lt;/code&gt;&lt;/span&gt;&lt;span id="qg0683" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg0684" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg0685" class="comment"&gt;and&lt;/span&gt; &lt;span id="qg0686" class="comment"&gt;with&lt;/span&gt; &lt;br id="qg0687"&gt;&lt;span id="qg0688" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg0689" class="comment"&gt;various&lt;/span&gt; &lt;span id="qg0690" class="comment"&gt;names&lt;/span&gt;&lt;span id="qg0691" class="comment"&gt;.&lt;/span&gt; &lt;span id="qg0692" class="comment"&gt;If&lt;/span&gt; &lt;span id="qg0693" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg0694" class="comment"&gt;grid&lt;/span&gt; &lt;span id="qg0695" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg0696" class="ST0"&gt;&amp;lt;b&gt;&lt;/span&gt;&lt;span id="qg0697" class="comment"&gt;3×3&lt;/span&gt;&lt;span id="qg0698" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg0699" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06100" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06101" class="comment"&gt;puzzle&lt;/span&gt; &lt;span id="qg06102" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg06103" class="comment"&gt;called&lt;/span&gt; &lt;span id="qg06104" class="comment"&gt;the&lt;/span&gt; &lt;br id="qg06105"&gt;&lt;span id="qg06106" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06107" class="ST0"&gt;&amp;lt;code&gt;&lt;/span&gt;&lt;span id="qg06108" class="ST0"&gt;&amp;lt;b&gt;&lt;/span&gt;&lt;span id="qg06109" class="comment"&gt;8-&lt;/span&gt;&lt;span id="qg06110" class="comment"&gt;puzzle&lt;/span&gt; &lt;span id="qg06111" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg06112" class="ST0"&gt;&amp;lt;/code&gt;&lt;/span&gt; &lt;span id="qg06113" class="comment"&gt;or&lt;/span&gt; &lt;span id="qg06114" class="ST0"&gt;&amp;lt;code&gt;&lt;/span&gt;&lt;span id="qg06115" class="ST0"&gt;&amp;lt;b&gt;&lt;/span&gt;&lt;span id="qg06116" class="comment"&gt;9-&lt;/span&gt;&lt;span id="qg06117" class="comment"&gt;puzzle&lt;/span&gt;&lt;span id="qg06118" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg06119" class="ST0"&gt;&amp;lt;/code&gt;&lt;/span&gt;&lt;span id="qg06120" class="comment"&gt;.&lt;/span&gt; &lt;span id="qg06121" class="comment"&gt;If&lt;/span&gt; &lt;br id="qg06122"&gt;&lt;span id="qg06123" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06124" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06125" class="comment"&gt;grid&lt;/span&gt; &lt;span id="qg06126" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg06127" class="ST0"&gt;&amp;lt;b&gt;&lt;/span&gt;&lt;span id="qg06128" class="comment"&gt;4×4&lt;/span&gt;&lt;span id="qg06129" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg06130" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06131" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06132" class="comment"&gt;puzzle&lt;/span&gt; &lt;span id="qg06133" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg06134" class="comment"&gt;called&lt;/span&gt; &lt;span id="qg06135" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06136" class="ST0"&gt;&amp;lt;code&gt;&lt;/span&gt;&lt;span id="qg06137" class="ST0"&gt;&amp;lt;b&gt;&lt;/span&gt;&lt;span id="qg06138" class="comment"&gt;15-&lt;/span&gt;&lt;span id="qg06139" class="comment"&gt;puzzle&lt;/span&gt;&lt;br id="qg06140"&gt;&lt;span id="qg06141" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06142" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg06143" class="ST0"&gt;&amp;lt;/code&gt;&lt;/span&gt; &lt;span id="qg06144" class="comment"&gt;or&lt;/span&gt; &lt;span id="qg06145" class="ST0"&gt;&amp;lt;code&gt;&lt;/span&gt;&lt;span id="qg06146" class="ST0"&gt;&amp;lt;b&gt;&lt;/span&gt;&lt;span id="qg06147" class="comment"&gt; 16-&lt;/span&gt;&lt;span id="qg06148" class="comment"&gt;puzzle&lt;/span&gt; &lt;span id="qg06149" class="ST0"&gt;&amp;lt;/b&gt;&lt;/span&gt;&lt;span id="qg06150" class="ST0"&gt;&amp;lt;/code&gt;&lt;/span&gt;&lt;span id="qg06151" class="comment"&gt;.&lt;/span&gt; &lt;span id="qg06152" class="comment"&gt;The&lt;/span&gt; &lt;span id="qg06153" class="comment"&gt;goal&lt;/span&gt; &lt;span id="qg06154" class="comment"&gt;of&lt;/span&gt; &lt;span id="qg06155" class="comment"&gt;the&lt;/span&gt; &lt;br id="qg06156"&gt;&lt;span id="qg06157" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06158" class="comment"&gt;puzzle&lt;/span&gt; &lt;span id="qg06159" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg06160" class="comment"&gt;to&lt;/span&gt; &lt;span id="qg06161" class="comment"&gt;unjumble&lt;/span&gt; &lt;span id="qg06162" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06163" class="comment"&gt;squares&lt;/span&gt; &lt;span id="qg06164" class="comment"&gt;by&lt;/span&gt; &lt;span id="qg06165" class="comment"&gt;only&lt;/span&gt; &lt;span id="qg06166" class="comment"&gt;making&lt;/span&gt; &lt;span id="qg06167" class="comment"&gt;moves&lt;/span&gt; &lt;span id="qg06168" class="comment"&gt;which&lt;/span&gt; &lt;span id="qg06169" class="comment"&gt;slide&lt;/span&gt; &lt;br id="qg06170"&gt;&lt;span id="qg06171" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06172" class="comment"&gt;squares&lt;/span&gt; &lt;span id="qg06173" class="comment"&gt;into&lt;/span&gt; &lt;span id="qg06174" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06175" class="comment"&gt;empty&lt;/span&gt; &lt;span id="qg06176" class="comment"&gt;space&lt;/span&gt;&lt;span id="qg06177" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06178" class="comment"&gt;in&lt;/span&gt; &lt;span id="qg06179" class="comment"&gt;turn&lt;/span&gt; &lt;span id="qg06180" class="comment"&gt;revealing&lt;/span&gt; &lt;span id="qg06181" class="comment"&gt;another&lt;/span&gt; &lt;span id="qg06182" class="comment"&gt;empty&lt;/span&gt; &lt;span id="qg06183" class="comment"&gt;space&lt;/span&gt; &lt;br id="qg06184"&gt;&lt;span id="qg06185" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06186" class="comment"&gt;in&lt;/span&gt; &lt;span id="qg06187" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06188" class="comment"&gt;position&lt;/span&gt; &lt;span id="qg06189" class="comment"&gt;of&lt;/span&gt; &lt;span id="qg06190" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06191" class="comment"&gt;moved&lt;/span&gt; &lt;span id="qg06192" class="comment"&gt;piece&lt;/span&gt;&lt;span id="qg06193" class="comment"&gt;.&lt;/span&gt;&lt;span id="qg06194" class="ST0"&gt;&amp;lt;/p&gt;&lt;/span&gt;&lt;br id="qg06195"&gt; &lt;span id="qg06197" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06198"&gt;&lt;br id="qg06199"&gt;&lt;span id="qg06200" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg06201"&gt;&lt;span id="qg06202" class="comment"&gt; * &lt;/span&gt;&lt;br id="qg06203"&gt;&lt;span id="qg06204" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06205" class="ST0"&gt;@author&lt;/span&gt; &lt;span id="qg06206" class="comment"&gt;Anil&lt;/span&gt; &lt;span id="qg06207" class="comment"&gt;Madamala&lt;/span&gt; &lt;br id="qg06208"&gt;&lt;span id="qg06209" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06210" class="comment"&gt;Copyright&lt;/span&gt;&lt;span id="qg06211" class="comment"&gt; (&lt;/span&gt;&lt;span id="qg06212" class="comment"&gt;c&lt;/span&gt;&lt;span id="qg06213" class="comment"&gt;) 2007,2008 &lt;/span&gt;&lt;span id="qg06214" class="comment"&gt;Anil&lt;/span&gt; &lt;span id="qg06215" class="comment"&gt;Madamala&lt;/span&gt;&lt;br id="qg06216"&gt;&lt;span id="qg06217" class="comment"&gt; * &lt;/span&gt;&lt;span id="qg06218" class="comment"&gt;Any&lt;/span&gt; &lt;span id="qg06219" class="comment"&gt;problems&lt;/span&gt; &lt;span id="qg06220" class="comment"&gt;contact&lt;/span&gt;&lt;span id="qg06221" class="comment"&gt;: &lt;/span&gt;&lt;span id="qg06222" class="comment"&gt;amadamala&lt;/span&gt;&lt;span id="qg06223" class="comment"&gt;+&lt;/span&gt;&lt;span id="qg06224" class="comment"&gt;code&lt;/span&gt;&lt;span id="qg06225" class="ST0"&gt;@gmail&lt;/span&gt;&lt;span id="qg06226" class="comment"&gt;.&lt;/span&gt;&lt;span id="qg06227" class="comment"&gt;com&lt;/span&gt;&lt;br id="qg06228"&gt;&lt;span id="qg06229" class="comment"&gt; * &lt;/span&gt;&lt;br id="qg06230"&gt; &lt;span id="qg06231" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06232"&gt;&lt;span id="qg06233" class="keyword-directive"&gt;public&lt;/span&gt; &lt;span id="qg06234" class="keyword-directive"&gt;class&lt;/span&gt; FifteenPuzzle &lt;span id="qg06235" class="keyword-directive"&gt;implements&lt;/span&gt; ActionListener {&lt;br id="qg06236"&gt;&lt;br id="qg06237"&gt;    &lt;span id="qg06238" class="comment"&gt;/* Dimention of the Board */&lt;/span&gt;&lt;br id="qg06239"&gt;    &lt;span id="qg06240" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06241" class="keyword-directive"&gt;static&lt;/span&gt; &lt;span id="qg06242" class="keyword-directive"&gt;final&lt;/span&gt; &lt;span id="qg06243" class="keyword-directive"&gt;int&lt;/span&gt; DIM = 4;  &lt;span id="qg06244" class="comment"&gt;// For N * N board DIM = N&lt;/span&gt;&lt;br id="qg06245"&gt;    &lt;span id="qg06246" class="comment"&gt;/* Total number of cells in the board */&lt;/span&gt;&lt;br id="qg06247"&gt;    &lt;span id="qg06248" class="keyword-directive"&gt;final&lt;/span&gt; &lt;span id="qg06249" class="keyword-directive"&gt;int&lt;/span&gt; SIZE = DIM * DIM;&lt;br id="qg06250"&gt;    &lt;span id="qg06251" class="comment"&gt;/* Win state */&lt;/span&gt;&lt;br id="qg06252"&gt;    &lt;span id="qg06253" class="keyword-directive"&gt;final&lt;/span&gt; String[] WIN = &lt;span id="qg06254" class="keyword-directive"&gt;new&lt;/span&gt; String[SIZE-1];&lt;br id="qg06255"&gt;    &lt;span id="qg06256" class="comment"&gt;/* Initial Height of the board*/&lt;/span&gt;&lt;br id="qg06257"&gt;    &lt;span id="qg06258" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06259" class="keyword-directive"&gt;static&lt;/span&gt; &lt;span id="qg06260" class="keyword-directive"&gt;final&lt;/span&gt; &lt;span id="qg06261" class="keyword-directive"&gt;int&lt;/span&gt; HEIGHT = 400;&lt;br id="qg06262"&gt;    &lt;span id="qg06263" class="comment"&gt;/* Initial Width of the board*/&lt;/span&gt;&lt;br id="qg06264"&gt;    &lt;span id="qg06265" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06266" class="keyword-directive"&gt;static&lt;/span&gt; &lt;span id="qg06267" class="keyword-directive"&gt;final&lt;/span&gt; &lt;span id="qg06268" class="keyword-directive"&gt;int&lt;/span&gt; WIDTH = 400;&lt;br id="qg06269"&gt;    &lt;span id="qg06270" class="comment"&gt;/* Initial empty cell in the board*/&lt;/span&gt;&lt;br id="qg06271"&gt;    &lt;span id="qg06272" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06273" class="keyword-directive"&gt;int&lt;/span&gt; emptyCell = DIM * DIM;&lt;br id="qg06274"&gt;    &lt;span id="qg06275" class="comment"&gt;/* 15 puzzle Board, of size (4 X 4)*/&lt;/span&gt;&lt;br id="qg06276"&gt;    &lt;span id="qg06277" class="keyword-directive"&gt;private&lt;/span&gt; JButton[][] board = &lt;span id="qg06278" class="keyword-directive"&gt;new&lt;/span&gt; JButton[DIM][DIM];&lt;br id="qg06279"&gt;    &lt;span id="qg06280" class="keyword-directive"&gt;private&lt;/span&gt; JFrame frame;&lt;br id="qg06281"&gt;    &lt;span id="qg06282" class="keyword-directive"&gt;private&lt;/span&gt; JPanel panel = &lt;span id="qg06283" class="keyword-directive"&gt;new&lt;/span&gt; JPanel();&lt;br id="qg06284"&gt;&lt;br id="qg06285"&gt;    &lt;span id="qg06286" class="comment"&gt;// Suppresses default constructor, ensuring non-instantiability.&lt;/span&gt;&lt;br id="qg06287"&gt;    &lt;span id="qg06288" class="keyword-directive"&gt;public&lt;/span&gt; FifteenPuzzle() {&lt;br id="qg06289"&gt;        &lt;span id="qg06290" class="keyword-directive"&gt;if&lt;/span&gt;(DIM &amp;lt;= 1){&lt;br id="qg06291"&gt;            JOptionPane.showMessageDialog(&lt;span id="qg06292" class="keyword-directive"&gt;null&lt;/span&gt;, &lt;span id="qg06293" class="character"&gt;"&lt;/span&gt;&lt;span id="qg06294" class="character"&gt;You Win The Game.&lt;/span&gt;&lt;span id="qg06295" class="character"&gt;"&lt;/span&gt;);&lt;br id="qg06296"&gt;            System.err.println(&lt;span id="qg06297" class="character"&gt;"&lt;/span&gt;&lt;span id="qg06298" class="character"&gt;Dimention Should be greater than 1 to play&lt;/span&gt;&lt;span id="qg06299" class="character"&gt;"&lt;/span&gt;);&lt;br id="qg06300"&gt;            System.exit(0);&lt;br id="qg06301"&gt;        }&lt;br id="qg06302"&gt;        &lt;span id="qg06303" class="comment"&gt;// Initialize the win state&lt;/span&gt;&lt;br id="qg06304"&gt;        &lt;span id="qg06305" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06306" class="keyword-directive"&gt;int&lt;/span&gt; i = 1; i &amp;lt; SIZE; i++) {&lt;br id="qg06307"&gt;            WIN[i-1] = Integer.toString(i);&lt;br id="qg06308"&gt;        }&lt;br id="qg06309"&gt;        &lt;br id="qg06310"&gt;        System.out.println(&lt;span id="qg06311" class="character"&gt;"&lt;/span&gt;&lt;span id="qg06312" class="character"&gt;Win State:&lt;/span&gt;&lt;span id="qg06313" class="character"&gt;"&lt;/span&gt; + Arrays.asList(WIN) );&lt;br id="qg06314"&gt;    }&lt;br id="qg06315"&gt;&lt;br id="qg06316"&gt;    &lt;span id="qg06317" class="keyword-directive"&gt;public&lt;/span&gt; &lt;span id="qg06318" class="keyword-directive"&gt;static&lt;/span&gt; &lt;span id="qg06319" class="keyword-directive"&gt;void&lt;/span&gt; main(String[] args) {&lt;br id="qg06320"&gt;        FifteenPuzzle game = &lt;span id="qg06321" class="keyword-directive"&gt;new&lt;/span&gt; FifteenPuzzle();&lt;br id="qg06322"&gt;        game.initializeBoard(); &lt;span id="qg06323" class="comment"&gt;/* Initializes the 15-puzzle game board */&lt;/span&gt;&lt;br id="qg06324"&gt;&lt;br id="qg06325"&gt;    }&lt;br id="qg06326"&gt;&lt;br id="qg06327"&gt;    &lt;span id="qg06328" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg06329"&gt;&lt;span id="qg06330" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06331" class="comment"&gt;Gives&lt;/span&gt; &lt;span id="qg06332" class="comment"&gt;index&lt;/span&gt; &lt;span id="qg06333" class="comment"&gt;value&lt;/span&gt; &lt;span id="qg06334" class="comment"&gt;corresponding&lt;/span&gt; &lt;span id="qg06335" class="comment"&gt;to&lt;/span&gt;&lt;span id="qg06336" class="comment"&gt; [&lt;/span&gt;&lt;span id="qg06337" class="comment"&gt;row&lt;/span&gt;&lt;span id="qg06338" class="comment"&gt;,&lt;/span&gt;&lt;span id="qg06339" class="comment"&gt;col&lt;/span&gt;&lt;span id="qg06340" class="comment"&gt;] &lt;/span&gt;&lt;span id="qg06341" class="comment"&gt;of&lt;/span&gt; &lt;span id="qg06342" class="comment"&gt;a&lt;/span&gt; &lt;span id="qg06343" class="comment"&gt;square&lt;/span&gt;&lt;br id="qg06344"&gt;&lt;span id="qg06345" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06346" class="ST0"&gt;@param&lt;/span&gt; &lt;span id="qg06347" class="comment"&gt;i&lt;/span&gt;&lt;span id="qg06348" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06349" class="comment"&gt;row&lt;/span&gt;&lt;br id="qg06350"&gt;&lt;span id="qg06351" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06352" class="ST0"&gt;@param&lt;/span&gt; &lt;span id="qg06353" class="comment"&gt;j&lt;/span&gt;&lt;span id="qg06354" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06355" class="comment"&gt;column&lt;/span&gt;&lt;br id="qg06356"&gt;&lt;span id="qg06357" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06358" class="ST0"&gt;@return&lt;/span&gt; &lt;span id="qg06359" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06360" class="comment"&gt;index&lt;/span&gt; &lt;span id="qg06361" class="comment"&gt;of&lt;/span&gt; &lt;span id="qg06362" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06363" class="comment"&gt;corresponding&lt;/span&gt; &lt;span id="qg06364" class="comment"&gt;to&lt;/span&gt; &lt;span id="qg06365" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06366" class="comment"&gt;row&lt;/span&gt; &lt;span id="qg06367" class="comment"&gt;and&lt;/span&gt; &lt;span id="qg06368" class="comment"&gt;column&lt;/span&gt;&lt;br id="qg06369"&gt;     &lt;span id="qg06370" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06371"&gt;    &lt;span id="qg06372" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06373" class="keyword-directive"&gt;int&lt;/span&gt; getIndex(&lt;span id="qg06374" class="keyword-directive"&gt;int&lt;/span&gt; i, &lt;span id="qg06375" class="keyword-directive"&gt;int&lt;/span&gt; j) {       &lt;br id="qg06376"&gt;        &lt;span id="qg06377" class="keyword-directive"&gt;return&lt;/span&gt; ((i * DIM) + j);  &lt;span id="qg06378" class="comment"&gt;// i * 4 + j        &lt;/span&gt;&lt;br id="qg06379"&gt;&lt;br id="qg06380"&gt;    }&lt;br id="qg06381"&gt;&lt;br id="qg06382"&gt;    &lt;span id="qg06383" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg06384"&gt;&lt;span id="qg06385" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06386" class="comment"&gt;Generates&lt;/span&gt; &lt;span id="qg06387" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06388" class="comment"&gt;random&lt;/span&gt; &lt;span id="qg06389" class="comment"&gt;intitial&lt;/span&gt; &lt;span id="qg06390" class="comment"&gt;state&lt;/span&gt; &lt;span id="qg06391" class="comment"&gt;for&lt;/span&gt; &lt;span id="qg06392" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06393" class="comment"&gt;game&lt;/span&gt;&lt;span id="qg06394" class="comment"&gt;.&lt;/span&gt;&lt;br id="qg06395"&gt;&lt;span id="qg06396" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06397" class="comment"&gt;Assigns&lt;/span&gt; &lt;span id="qg06398" class="comment"&gt;unique&lt;/span&gt; &lt;span id="qg06399" class="comment"&gt;random&lt;/span&gt; &lt;span id="qg06400" class="comment"&gt;number&lt;/span&gt; &lt;span id="qg06401" class="comment"&gt;to&lt;/span&gt; &lt;span id="qg06402" class="comment"&gt;each&lt;/span&gt; &lt;span id="qg06403" class="comment"&gt;square&lt;/span&gt;&lt;br id="qg06404"&gt;     &lt;span id="qg06405" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06406"&gt;    &lt;span id="qg06407" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06408" class="keyword-directive"&gt;void&lt;/span&gt; initializeBoard() {&lt;br id="qg06409"&gt;        ArrayList&amp;lt;Integer&gt; intialList = &lt;span id="qg06410" class="keyword-directive"&gt;new&lt;/span&gt; ArrayList&amp;lt;Integer&gt;(SIZE);&lt;br id="qg06411"&gt;&lt;br id="qg06412"&gt;        &lt;span id="qg06413" class="comment"&gt;// Repeat until creation of solvable initial board&lt;/span&gt;&lt;br id="qg06414"&gt;        &lt;span id="qg06415" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06416" class="keyword-directive"&gt;boolean&lt;/span&gt; isSolvable = &lt;span id="qg06417" class="keyword-directive"&gt;false&lt;/span&gt;; isSolvable == &lt;span id="qg06418" class="keyword-directive"&gt;false&lt;/span&gt;;) {&lt;br id="qg06419"&gt;&lt;br id="qg06420"&gt;            &lt;span id="qg06421" class="comment"&gt;// create ordered list&lt;/span&gt;&lt;br id="qg06422"&gt;            intialList = &lt;span id="qg06423" class="keyword-directive"&gt;new&lt;/span&gt; ArrayList&amp;lt;Integer&gt;(SIZE);&lt;br id="qg06424"&gt;            &lt;span id="qg06425" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06426" class="keyword-directive"&gt;int&lt;/span&gt; i = 0; i &amp;lt; SIZE; i++) {&lt;br id="qg06427"&gt;                intialList.add(i, i);&lt;br id="qg06428"&gt;            }&lt;br id="qg06429"&gt;&lt;br id="qg06430"&gt;            &lt;span id="qg06431" class="comment"&gt;// Shuffle the list&lt;/span&gt;&lt;br id="qg06432"&gt;            Collections.shuffle(intialList);&lt;br id="qg06433"&gt;&lt;br id="qg06434"&gt;            &lt;span id="qg06435" class="comment"&gt;// Check list can be solvable or not&lt;/span&gt;&lt;br id="qg06436"&gt;            isSolvable = isSolvable(intialList);&lt;br id="qg06437"&gt;        }&lt;br id="qg06438"&gt;        System.out.println(&lt;span id="qg06439" class="character"&gt;"&lt;/span&gt;&lt;span id="qg06440" class="character"&gt;Initial Board state:&lt;/span&gt;&lt;span id="qg06441" class="character"&gt;"&lt;/span&gt; + intialList);&lt;br id="qg06442"&gt;&lt;br id="qg06443"&gt;        &lt;span id="qg06444" class="comment"&gt;// Assigns unique random number to each square        &lt;/span&gt;&lt;br id="qg06445"&gt;        &lt;span id="qg06446" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06447" class="keyword-directive"&gt;int&lt;/span&gt; index = 0; index &amp;lt; SIZE; index++) {&lt;br id="qg06448"&gt;            &lt;span id="qg06449" class="keyword-directive"&gt;final&lt;/span&gt; &lt;span id="qg06450" class="keyword-directive"&gt;int&lt;/span&gt; ROW = index / DIM;  &lt;span id="qg06451" class="comment"&gt;// row number from index&lt;/span&gt;&lt;br id="qg06452"&gt;            &lt;span id="qg06453" class="keyword-directive"&gt;final&lt;/span&gt; &lt;span id="qg06454" class="keyword-directive"&gt;int&lt;/span&gt; COL = index % DIM;   &lt;span id="qg06455" class="comment"&gt;// column number from index &lt;/span&gt;&lt;br id="qg06456"&gt;            board[ROW][COL] = &lt;span id="qg06457" class="keyword-directive"&gt;new&lt;/span&gt; JButton(String.valueOf(intialList.get(index)));&lt;br id="qg06458"&gt;            &lt;span id="qg06459" class="comment"&gt;// intializes the empty square and hide it&lt;/span&gt;&lt;br id="qg06460"&gt;            &lt;span id="qg06461" class="keyword-directive"&gt;if&lt;/span&gt; (intialList.get(index) == 0) {&lt;br id="qg06462"&gt;                emptyCell = index;&lt;br id="qg06463"&gt;                board[ROW][COL].setVisible(&lt;span id="qg06464" class="keyword-directive"&gt;false&lt;/span&gt;);&lt;br id="qg06465"&gt;            }&lt;br id="qg06466"&gt;&lt;br id="qg06467"&gt;            &lt;span id="qg06468" class="comment"&gt;// Decorating each square&lt;/span&gt;&lt;br id="qg06469"&gt;            board[ROW][COL].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));&lt;br id="qg06470"&gt;            board[ROW][COL].setBackground(Color.BLACK);&lt;br id="qg06471"&gt;            board[ROW][COL].setForeground(Color.GREEN);&lt;br id="qg06472"&gt;            board[ROW][COL].addActionListener(&lt;span id="qg06473" class="keyword-directive"&gt;this&lt;/span&gt;);&lt;br id="qg06474"&gt;            panel.add(board[ROW][COL]);&lt;br id="qg06475"&gt;        }&lt;br id="qg06476"&gt;&lt;br id="qg06477"&gt;        &lt;span id="qg06478" class="comment"&gt;// Initializes the Frame&lt;/span&gt;&lt;br id="qg06479"&gt;        frame = &lt;span id="qg06480" class="keyword-directive"&gt;new&lt;/span&gt; JFrame(&lt;span id="qg06481" class="character"&gt;"&lt;/span&gt;&lt;span id="qg06482" class="character"&gt;Shuffle Game&lt;/span&gt;&lt;span id="qg06483" class="character"&gt;"&lt;/span&gt;);&lt;br id="qg06484"&gt;        frame.setLocation(400, 200);&lt;br id="qg06485"&gt;        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br id="qg06486"&gt;        frame.pack();&lt;br id="qg06487"&gt;        frame.setSize(HEIGHT, WIDTH);&lt;br id="qg06488"&gt;&lt;br id="qg06489"&gt;        &lt;span id="qg06490" class="comment"&gt;// Initializes the panel&lt;/span&gt;&lt;br id="qg06491"&gt;        panel.setLayout(&lt;span id="qg06492" class="keyword-directive"&gt;new&lt;/span&gt; GridLayout(DIM, DIM));&lt;br id="qg06493"&gt;        panel.setBackground(Color.GRAY);&lt;br id="qg06494"&gt;&lt;br id="qg06495"&gt;        &lt;span id="qg06496" class="comment"&gt;// Initializes the content pane&lt;/span&gt;&lt;br id="qg06497"&gt;        java.awt.Container content = frame.getContentPane();&lt;br id="qg06498"&gt;        content.add(panel, BorderLayout.CENTER);&lt;br id="qg06499"&gt;        content.setBackground(Color.GRAY);&lt;br id="qg06500"&gt;        frame.setVisible(&lt;span id="qg06501" class="keyword-directive"&gt;true&lt;/span&gt;);&lt;br id="qg06502"&gt;    }&lt;br id="qg06503"&gt;&lt;br id="qg06504"&gt;    &lt;span id="qg06505" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg06506"&gt;&lt;span id="qg06507" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06508" class="comment"&gt;Verifies&lt;/span&gt; &lt;span id="qg06509" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06510" class="comment"&gt;board&lt;/span&gt; &lt;span id="qg06511" class="comment"&gt;for&lt;/span&gt; &lt;span id="qg06512" class="comment"&gt;solvability&lt;/span&gt;&lt;span id="qg06513" class="comment"&gt;.&lt;/span&gt;&lt;br id="qg06514"&gt;&lt;span id="qg06515" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06516" class="comment"&gt;For&lt;/span&gt; &lt;span id="qg06517" class="comment"&gt;more&lt;/span&gt; &lt;span id="qg06518" class="comment"&gt;detals&lt;/span&gt; &lt;span id="qg06519" class="comment"&gt;of&lt;/span&gt; &lt;span id="qg06520" class="comment"&gt;solvability&lt;/span&gt; &lt;span id="qg06521" class="comment"&gt;goto&lt;/span&gt; &lt;span id="qg06522" class="comment"&gt;URL&lt;/span&gt;&lt;span id="qg06523" class="comment"&gt;:&lt;/span&gt;&lt;br id="qg06524"&gt;&lt;span id="qg06525" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06526" class="comment"&gt;http&lt;/span&gt;&lt;span id="qg06527" class="comment"&gt;://&lt;/span&gt;&lt;span id="qg06528" class="comment"&gt;mathworld&lt;/span&gt;&lt;span id="qg06529" class="comment"&gt;.&lt;/span&gt;&lt;span id="qg06530" class="comment"&gt;wolfram&lt;/span&gt;&lt;span id="qg06531" class="comment"&gt;.&lt;/span&gt;&lt;span id="qg06532" class="comment"&gt;com&lt;/span&gt;&lt;span id="qg06533" class="comment"&gt;/15&lt;/span&gt;&lt;span id="qg06534" class="comment"&gt;Puzzle&lt;/span&gt;&lt;span id="qg06535" class="comment"&gt;.&lt;/span&gt;&lt;span id="qg06536" class="comment"&gt;html&lt;/span&gt; &lt;br id="qg06537"&gt;&lt;span id="qg06538" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06539" class="ST0"&gt;@param&lt;/span&gt; &lt;span id="qg06540" class="comment"&gt;initialList&lt;/span&gt;&lt;br id="qg06541"&gt;&lt;span id="qg06542" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06543" class="ST0"&gt;@return&lt;/span&gt; &lt;span id="qg06544" class="comment"&gt;true&lt;/span&gt;&lt;span id="qg06545" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06546" class="comment"&gt;if&lt;/span&gt; &lt;span id="qg06547" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06548" class="comment"&gt;initial&lt;/span&gt; &lt;span id="qg06549" class="comment"&gt;board&lt;/span&gt; &lt;span id="qg06550" class="comment"&gt;can&lt;/span&gt; &lt;span id="qg06551" class="comment"&gt;be&lt;/span&gt; &lt;span id="qg06552" class="comment"&gt;solvable&lt;/span&gt;&lt;br id="qg06553"&gt;&lt;span id="qg06555" class="comment"&gt;     *         &lt;/span&gt;&lt;span id="qg06556" class="comment"&gt;false&lt;/span&gt;&lt;span id="qg06557" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06558" class="comment"&gt;if&lt;/span&gt; &lt;span id="qg06559" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06560" class="comment"&gt;initial&lt;/span&gt; &lt;span id="qg06561" class="comment"&gt;board&lt;/span&gt; &lt;span id="qg06562" class="comment"&gt;can&lt;/span&gt;&lt;span id="qg06563" class="comment"&gt;'&lt;/span&gt;&lt;span id="qg06564" class="comment"&gt;t&lt;/span&gt; &lt;span id="qg06565" class="comment"&gt;be&lt;/span&gt; &lt;span id="qg06566" class="comment"&gt;solvable&lt;/span&gt;&lt;br id="qg06567"&gt;     &lt;span id="qg06569" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06570"&gt;    &lt;span id="qg06571" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06572" class="keyword-directive"&gt;boolean&lt;/span&gt; isSolvable(ArrayList&amp;lt;Integer&gt; list) {&lt;br id="qg06573"&gt;        &lt;span id="qg06575" class="keyword-directive"&gt;int&lt;/span&gt; inversionSum = 0;  &lt;span id="qg06576" class="comment"&gt;// If this sum is even it is solvable&lt;/span&gt;&lt;br id="qg06577"&gt;        &lt;span id="qg06579" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06580" class="keyword-directive"&gt;int&lt;/span&gt; i = 0; i &amp;lt; list.size(); i++) {&lt;br id="qg06581"&gt;            &lt;span id="qg06583" class="comment"&gt;// For empty square add row number to inversionSum                &lt;/span&gt;&lt;br id="qg06584"&gt;            &lt;span id="qg06585" class="keyword-directive"&gt;if&lt;/span&gt; (list.get(i) == 0) {&lt;br id="qg06586"&gt;                inversionSum += ((i / DIM) + 1);  &lt;span id="qg06587" class="comment"&gt;//add Row number&lt;/span&gt;&lt;br id="qg06588"&gt;                &lt;span id="qg06590" class="keyword-directive"&gt;continue&lt;/span&gt;;&lt;br id="qg06591"&gt;            }&lt;br id="qg06592"&gt;&lt;br id="qg06593"&gt;            &lt;span id="qg06594" class="keyword-directive"&gt;int&lt;/span&gt; count = 0;&lt;br id="qg06595"&gt;            &lt;span id="qg06597" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06598" class="keyword-directive"&gt;int&lt;/span&gt; j = i + 1; j &amp;lt; list.size(); j++) {&lt;br id="qg06599"&gt;                &lt;span id="qg06600" class="comment"&gt;// No need need to count for empty square&lt;/span&gt;&lt;br id="qg06601"&gt;                &lt;span id="qg06602" class="keyword-directive"&gt;if&lt;/span&gt; (list.get(j) == 0) {&lt;br id="qg06603"&gt;                    &lt;span id="qg06604" class="keyword-directive"&gt;continue&lt;/span&gt;;&lt;br id="qg06605"&gt;                } &lt;span id="qg06606" class="keyword-directive"&gt;else&lt;/span&gt; &lt;span id="qg06607" class="keyword-directive"&gt;if&lt;/span&gt; (list.get(i) &gt; list.get(j)) { &lt;span id="qg06608" class="comment"&gt;// If any element greater &lt;/span&gt;&lt;br id="qg06609"&gt;                    count++;                            &lt;span id="qg06611" class="comment"&gt;// than seed increse the &lt;/span&gt;&lt;br id="qg06612"&gt;                }                                       &lt;span id="qg06613" class="comment"&gt;// inversionSum                    &lt;/span&gt;&lt;br id="qg06614"&gt;            }&lt;br id="qg06615"&gt;            inversionSum += count;&lt;br id="qg06616"&gt;        }&lt;br id="qg06617"&gt;&lt;br id="qg06618"&gt;        &lt;span id="qg06619" class="comment"&gt;// if inversionSum is even return true, otherwise false&lt;/span&gt;&lt;br id="qg06620"&gt;        &lt;span id="qg06621" class="keyword-directive"&gt;return&lt;/span&gt; ((inversionSum &amp;amp; 1) == 0) ? &lt;span id="qg06622" class="keyword-directive"&gt;true&lt;/span&gt; : &lt;span id="qg06623" class="keyword-directive"&gt;false&lt;/span&gt;;&lt;br id="qg06624"&gt;    }&lt;br id="qg06625"&gt;&lt;br id="qg06626"&gt;    &lt;span id="qg06627" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg06628"&gt;&lt;span id="qg06630" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06631" class="comment"&gt;If&lt;/span&gt; &lt;span id="qg06632" class="comment"&gt;any&lt;/span&gt; &lt;span id="qg06633" class="comment"&gt;button&lt;/span&gt; &lt;span id="qg06634" class="comment"&gt;in&lt;/span&gt; &lt;span id="qg06635" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06636" class="comment"&gt;board&lt;/span&gt; is &lt;span id="qg06638" class="comment"&gt;pressed&lt;/span&gt;&lt;span id="qg06639" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06640" class="comment"&gt;it&lt;/span&gt; &lt;span id="qg06641" class="comment"&gt;will&lt;/span&gt; &lt;span id="qg06642" class="comment"&gt;perform&lt;/span&gt; &lt;span id="qg06643" class="comment"&gt;the&lt;/span&gt;&lt;br id="qg06644"&gt;&lt;span id="qg06646" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06647" class="comment"&gt;required&lt;/span&gt; &lt;span id="qg06648" class="comment"&gt;actions&lt;/span&gt; &lt;span id="qg06649" class="comment"&gt;associated&lt;/span&gt; &lt;span id="qg06650" class="comment"&gt;with&lt;/span&gt; &lt;span id="qg06651" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06652" class="comment"&gt;button&lt;/span&gt;&lt;span id="qg06653" class="comment"&gt;.&lt;/span&gt; &lt;span id="qg06654" class="comment"&gt;Actions&lt;/span&gt; &lt;span id="qg06655" class="comment"&gt;like&lt;/span&gt;&lt;br id="qg06656"&gt;&lt;span id="qg06658" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06659" class="comment"&gt;checking&lt;/span&gt; &lt;span id="qg06660" class="comment"&gt;isAdjacent&lt;/span&gt;&lt;span id="qg06661" class="comment"&gt;(), &lt;/span&gt;&lt;span id="qg06662" class="comment"&gt;swapping&lt;/span&gt; &lt;span id="qg06663" class="comment"&gt;using&lt;/span&gt; &lt;span id="qg06664" class="comment"&gt;swapWithEmpty&lt;/span&gt;&lt;span id="qg06665" class="comment"&gt;() &lt;/span&gt;&lt;span id="qg06666" class="comment"&gt;and&lt;/span&gt; &lt;span id="qg06667" class="comment"&gt;also&lt;/span&gt;&lt;br id="qg06668"&gt;&lt;span id="qg06669" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06670" class="comment"&gt;checks&lt;/span&gt; &lt;span id="qg06671" class="comment"&gt;to&lt;/span&gt; &lt;span id="qg06672" class="comment"&gt;see&lt;/span&gt; &lt;span id="qg06673" class="comment"&gt;whether&lt;/span&gt; &lt;span id="qg06674" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06675" class="comment"&gt;game&lt;/span&gt; &lt;span id="qg06676" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg06677" class="comment"&gt;finished&lt;/span&gt; &lt;span id="qg06678" class="comment"&gt;or&lt;/span&gt; &lt;span id="qg06679" class="comment"&gt;not&lt;/span&gt;&lt;span id="qg06680" class="comment"&gt;.&lt;/span&gt;&lt;br id="qg06681"&gt;&lt;span id="qg06683" class="comment"&gt;     * &lt;/span&gt;&lt;br id="qg06684"&gt;&lt;span id="qg06685" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06686" class="ST0"&gt;@param&lt;/span&gt; &lt;span id="qg06687" class="comment"&gt;event&lt;/span&gt;&lt;span id="qg06688" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06689" class="comment"&gt;event&lt;/span&gt; &lt;span id="qg06690" class="comment"&gt;performed&lt;/span&gt; &lt;span id="qg06691" class="comment"&gt;by&lt;/span&gt; &lt;span id="qg06692" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06693" class="comment"&gt;player&lt;/span&gt;&lt;br id="qg06694"&gt;&lt;span id="qg06696" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06697" class="ST0"&gt;@throws&lt;/span&gt; &lt;span id="qg06698" class="comment"&gt;IllegalArgumentException&lt;/span&gt;&lt;span id="qg06699" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06700" class="comment"&gt;if&lt;/span&gt; &lt;span id="qg06701" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06702" class="ST0"&gt;&amp;lt;tt&gt;&lt;/span&gt;&lt;span id="qg06703" class="comment"&gt;index&lt;/span&gt;&lt;span id="qg06704" class="comment"&gt; = -1 &lt;/span&gt;&lt;span id="qg06705" class="ST0"&gt;&amp;lt;/tt&gt;&lt;/span&gt;&lt;br id="qg06706"&gt;     &lt;span id="qg06707" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06708"&gt;    &lt;span id="qg06710" class="keyword-directive"&gt;public&lt;/span&gt; &lt;span id="qg06711" class="keyword-directive"&gt;void&lt;/span&gt; actionPerformed(ActionEvent event) &lt;span id="qg06712" class="keyword-directive"&gt;throws&lt;/span&gt; IllegalArgumentException {&lt;br id="qg06713"&gt;        JButton buttonPressed = (JButton) event.getSource();&lt;br id="qg06714"&gt;        &lt;span id="qg06715" class="keyword-directive"&gt;int&lt;/span&gt; index = indexOf(buttonPressed.getText());&lt;br id="qg06716"&gt;        &lt;span id="qg06717" class="keyword-directive"&gt;if&lt;/span&gt; (index == -1) {&lt;br id="qg06718"&gt;            &lt;span id="qg06719" class="keyword-directive"&gt;throw&lt;/span&gt; (&lt;span id="qg06720" class="keyword-directive"&gt;new&lt;/span&gt; IllegalArgumentException(&lt;span id="qg06721" class="character"&gt;"&lt;/span&gt;&lt;span id="qg06722" class="character"&gt;Index should be between 0-15&lt;/span&gt;&lt;span id="qg06723" class="character"&gt;"&lt;/span&gt;));&lt;br id="qg06724"&gt;        }&lt;br id="qg06725"&gt;        &lt;span id="qg06726" class="keyword-directive"&gt;int&lt;/span&gt; row = index / DIM;&lt;br id="qg06727"&gt;        &lt;span id="qg06728" class="keyword-directive"&gt;int&lt;/span&gt; column = index % DIM;&lt;br id="qg06729"&gt;&lt;br id="qg06730"&gt;        &lt;span id="qg06731" class="comment"&gt;// If pressed button in same row or same column&lt;/span&gt;&lt;br id="qg06732"&gt;        makeMove(row, column);&lt;br id="qg06734"&gt;&lt;br id="qg06735"&gt;        &lt;span id="qg06736" class="comment"&gt;// If the game is finished, "You Win the Game" dialog will appear&lt;/span&gt;&lt;br id="qg06737"&gt;        &lt;span id="qg06738" class="keyword-directive"&gt;if&lt;/span&gt; (isFinished()) {&lt;br id="qg06739"&gt;            JOptionPane.showMessageDialog(&lt;span id="qg06740" class="keyword-directive"&gt;null&lt;/span&gt;, &lt;span id="qg06741" class="character"&gt;"&lt;/span&gt;&lt;span id="qg06742" class="character"&gt;You Win The Game.&lt;/span&gt;&lt;span id="qg06743" class="character"&gt;"&lt;/span&gt;);&lt;br id="qg06744"&gt;        }&lt;br id="qg06745"&gt;    }&lt;br id="qg06746"&gt;&lt;br id="qg06747"&gt;    &lt;span id="qg06748" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg06749"&gt;&lt;span id="qg06751" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06752" class="comment"&gt;Gives&lt;/span&gt; &lt;span id="qg06753" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06754" class="comment"&gt;index&lt;/span&gt; &lt;span id="qg06755" class="comment"&gt;by&lt;/span&gt; &lt;span id="qg06756" class="comment"&gt;processing&lt;/span&gt; &lt;span id="qg06757" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06758" class="comment"&gt;text&lt;/span&gt; &lt;span id="qg06759" class="comment"&gt;on&lt;/span&gt; &lt;span id="qg06760" class="comment"&gt;sqare&lt;/span&gt;&lt;br id="qg06761"&gt;&lt;span id="qg06763" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06764" class="ST0"&gt;@param&lt;/span&gt; &lt;span id="qg06765" class="comment"&gt;cellNum&lt;/span&gt;&lt;span id="qg06766" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06767" class="comment"&gt;number&lt;/span&gt; &lt;span id="qg06768" class="comment"&gt;on&lt;/span&gt; &lt;span id="qg06769" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06770" class="comment"&gt;button&lt;/span&gt;&lt;br id="qg06771"&gt;&lt;span id="qg06772" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06773" class="ST0"&gt;@return&lt;/span&gt; &lt;span id="qg06774" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06775" class="comment"&gt;index&lt;/span&gt; &lt;span id="qg06776" class="comment"&gt;of&lt;/span&gt; &lt;span id="qg06777" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06778" class="comment"&gt;button&lt;/span&gt;&lt;br id="qg06779"&gt;     &lt;span id="qg06781" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06782"&gt;    &lt;span id="qg06783" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06784" class="keyword-directive"&gt;int&lt;/span&gt; indexOf(String cellNum) {&lt;br id="qg06785"&gt;&lt;br id="qg06786"&gt;        &lt;span id="qg06787" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06788" class="keyword-directive"&gt;int&lt;/span&gt; ROW = 0; ROW &amp;lt; board.length; ROW++) {&lt;br id="qg06789"&gt;            &lt;span id="qg06790" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06791" class="keyword-directive"&gt;int&lt;/span&gt; COL = 0; COL &amp;lt; board[ROW].length; COL++) {&lt;br id="qg06792"&gt;                &lt;span id="qg06793" class="keyword-directive"&gt;if&lt;/span&gt; (board[ROW][COL].getText().equals(cellNum)) {&lt;br id="qg06794"&gt;                    &lt;span id="qg06795" class="keyword-directive"&gt;return&lt;/span&gt; (getIndex(ROW, COL));&lt;br id="qg06796"&gt;                }&lt;br id="qg06797"&gt;            }&lt;br id="qg06798"&gt;        }&lt;br id="qg06799"&gt;        &lt;span id="qg06800" class="keyword-directive"&gt;return&lt;/span&gt; -1;   &lt;span id="qg06801" class="comment"&gt;// Wrong input returns -1&lt;/span&gt;&lt;br id="qg06802"&gt;&lt;br id="qg06803"&gt;    }&lt;br id="qg06804"&gt;&lt;br id="qg06805"&gt;    &lt;span id="qg06806" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg06807"&gt;&lt;span id="qg06808" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06809" class="comment"&gt;Checks&lt;/span&gt; &lt;span id="qg06810" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06811" class="comment"&gt;row&lt;/span&gt; &lt;span id="qg06812" class="comment"&gt;or&lt;/span&gt; &lt;span id="qg06813" class="comment"&gt;column&lt;/span&gt; &lt;span id="qg06814" class="comment"&gt;with&lt;/span&gt; &lt;span id="qg06815" class="comment"&gt;empty&lt;/span&gt; &lt;span id="qg06816" class="comment"&gt;square&lt;/span&gt;&lt;br id="qg06817"&gt;&lt;span id="qg06819" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06820" class="ST0"&gt;@return&lt;/span&gt; &lt;span id="qg06821" class="comment"&gt;true&lt;/span&gt;&lt;span id="qg06822" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06823" class="comment"&gt;if&lt;/span&gt; &lt;span id="qg06824" class="comment"&gt;we&lt;/span&gt; &lt;span id="qg06825" class="comment"&gt;pressed&lt;/span&gt; &lt;span id="qg06826" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06827" class="comment"&gt;button&lt;/span&gt; &lt;span id="qg06828" class="comment"&gt;in&lt;/span&gt; &lt;span id="qg06829" class="comment"&gt;same&lt;/span&gt; &lt;span id="qg06830" class="comment"&gt;row&lt;/span&gt; &lt;span id="qg06831" class="comment"&gt;or&lt;/span&gt; &lt;span id="qg06832" class="comment"&gt;column&lt;/span&gt; &lt;br id="qg06833"&gt;&lt;span id="qg06835" class="comment"&gt;     *              &lt;/span&gt;&lt;span id="qg06836" class="comment"&gt;as&lt;/span&gt; &lt;span id="qg06837" class="comment"&gt;empty&lt;/span&gt; &lt;span id="qg06838" class="comment"&gt;square&lt;/span&gt;&lt;br id="qg06839"&gt;&lt;span id="qg06840" class="comment"&gt;     *         &lt;/span&gt;&lt;span id="qg06841" class="comment"&gt;false&lt;/span&gt;&lt;span id="qg06842" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06843" class="comment"&gt;otherwise&lt;/span&gt;&lt;br id="qg06844"&gt;     &lt;span id="qg06845" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06846"&gt;    &lt;span id="qg06848" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06849" class="keyword-directive"&gt;boolean&lt;/span&gt; makeMove(&lt;span id="qg06850" class="keyword-directive"&gt;int&lt;/span&gt; row, &lt;span id="qg06851" class="keyword-directive"&gt;int&lt;/span&gt; col) {&lt;br id="qg06852"&gt;        &lt;span id="qg06853" class="keyword-directive"&gt;final&lt;/span&gt; &lt;span id="qg06854" class="keyword-directive"&gt;int&lt;/span&gt; emptyRow = emptyCell / DIM;  &lt;span id="qg06855" class="comment"&gt;// Empty cell row number&lt;/span&gt;&lt;br id="qg06856"&gt;        &lt;span id="qg06858" class="keyword-directive"&gt;final&lt;/span&gt; &lt;span id="qg06859" class="keyword-directive"&gt;int&lt;/span&gt; emptyCol = emptyCell % DIM;   &lt;span id="qg06860" class="comment"&gt;// Empty cell column number&lt;/span&gt;&lt;br id="qg06861"&gt;        &lt;span id="qg06862" class="keyword-directive"&gt;int&lt;/span&gt; rowDiff = emptyRow - row;&lt;br id="qg06863"&gt;        &lt;span id="qg06864" class="keyword-directive"&gt;int&lt;/span&gt; colDiff = emptyCol - col;&lt;br id="qg06865"&gt;        &lt;span id="qg06866" class="keyword-directive"&gt;boolean&lt;/span&gt; isInRow = (row == emptyRow);&lt;br id="qg06867"&gt;        &lt;span id="qg06868" class="keyword-directive"&gt;boolean&lt;/span&gt; isInCol = (col == emptyCol);&lt;br id="qg06869"&gt;        &lt;span id="qg06870" class="keyword-directive"&gt;boolean&lt;/span&gt; isNotDiagonal = (isInRow || isInCol);&lt;br id="qg06871"&gt;&lt;br id="qg06872"&gt;        &lt;span id="qg06873" class="keyword-directive"&gt;if&lt;/span&gt; (isNotDiagonal) {&lt;br id="qg06874"&gt;            &lt;span id="qg06875" class="keyword-directive"&gt;int&lt;/span&gt; diff = Math.abs(colDiff);&lt;br id="qg06876"&gt;    &lt;br id="e5q4"&gt;            &lt;span id="qg06877" class="comment"&gt;// -ve diff, move row left&lt;/span&gt;&lt;br id="qg06878"&gt;            &lt;span id="qg06880" class="keyword-directive"&gt;if&lt;/span&gt; (colDiff &amp;lt; 0 &amp;amp; isInRow) {&lt;br id="qg06881"&gt;                &lt;span id="qg06882" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06883" class="keyword-directive"&gt;int&lt;/span&gt; i = 0; i &amp;lt; diff; i++) {&lt;br id="qg06884"&gt;                    board[emptyRow][emptyCol + i].setText(&lt;br id="qg06885"&gt;                            board[emptyRow][emptyCol + (i + 1)].getText());&lt;br id="qg06886"&gt;                }&lt;br id="qg06887"&gt;&lt;br id="qg06888"&gt;            } &lt;span id="qg06889" class="comment"&gt;// + ve Diff, move row right&lt;/span&gt;&lt;br id="qg06890"&gt;            &lt;span id="qg06892" class="keyword-directive"&gt;else&lt;/span&gt; &lt;span id="qg06893" class="keyword-directive"&gt;if&lt;/span&gt; (colDiff &gt; 0 &amp;amp; isInRow) {&lt;br id="qg06894"&gt;                &lt;span id="qg06897" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06898" class="keyword-directive"&gt;int&lt;/span&gt; i = 0; i &amp;lt; diff; i++) {&lt;br id="qg06899"&gt;                    board[emptyRow][emptyCol - i].setText(&lt;br id="qg06900"&gt;                            board[emptyRow][emptyCol - (i + 1)].getText());&lt;br id="qg06901"&gt;                }&lt;br id="qg06902"&gt;            }&lt;br id="qg06903"&gt;&lt;br id="qg06904"&gt;            diff = Math.abs(rowDiff);&lt;br id="qg06905"&gt;&lt;br id="e5q40"&gt;            &lt;span id="qg06906" class="comment"&gt;// -ve diff, move column up&lt;/span&gt;&lt;br id="qg06907"&gt;            &lt;span id="qg06909" class="keyword-directive"&gt;if&lt;/span&gt; (rowDiff &amp;lt; 0 &amp;amp; isInCol) {&lt;br id="qg06910"&gt;                &lt;span id="qg06912" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06913" class="keyword-directive"&gt;int&lt;/span&gt; i = 0; i &amp;lt; diff; i++) {&lt;br id="qg06914"&gt;                    board[emptyRow + i][emptyCol].setText(&lt;br id="qg06915"&gt;                            board[emptyRow + (i + 1)][emptyCol].getText());&lt;br id="qg06916"&gt;                }&lt;br id="qg06917"&gt;&lt;br id="qg06918"&gt;            } &lt;span id="qg06919" class="comment"&gt;// + ve Diff, move column down&lt;/span&gt;&lt;br id="qg06920"&gt;            &lt;span id="qg06922" class="keyword-directive"&gt;else&lt;/span&gt; &lt;span id="qg06923" class="keyword-directive"&gt;if&lt;/span&gt; (rowDiff &gt; 0 &amp;amp; isInCol) {&lt;br id="qg06924"&gt;                &lt;span id="qg06927" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06928" class="keyword-directive"&gt;int&lt;/span&gt; i = 0; i &amp;lt; diff; i++) {&lt;br id="qg06929"&gt;                    board[emptyRow - i][emptyCol].setText(&lt;br id="qg06930"&gt;                            board[emptyRow - (i + 1)][emptyCol].getText());&lt;br id="qg06931"&gt;                }&lt;br id="qg06932"&gt;            }&lt;br id="qg06933"&gt;&lt;br id="kbxm"&gt;            &lt;span id="qg06934" class="comment"&gt;// Swap the empty square with the given square&lt;/span&gt;&lt;br id="qg06935"&gt;            board[emptyRow][emptyCol].setVisible(&lt;span id="qg06937" class="keyword-directive"&gt;true&lt;/span&gt;);&lt;br id="qg06938"&gt;            board[row][col].setText(Integer.toString(0));&lt;br id="qg06939"&gt;            board[row][col].setVisible(&lt;span id="qg06940" class="keyword-directive"&gt;false&lt;/span&gt;);&lt;br id="qg06941"&gt;            emptyCell = getIndex(row, col);&lt;br id="qg06942"&gt;        }&lt;br id="qg06943"&gt;&lt;br id="qg06944"&gt;        &lt;span id="qg06945" class="keyword-directive"&gt;return&lt;/span&gt; &lt;span id="qg06946" class="keyword-directive"&gt;true&lt;/span&gt;;&lt;br id="qg06947"&gt;    }&lt;br id="qg06948"&gt;&lt;br id="qg06949"&gt;    &lt;span id="qg06950" class="comment"&gt;/**&lt;/span&gt;&lt;br id="qg06951"&gt;&lt;span id="qg06952" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06953" class="comment"&gt;Checks&lt;/span&gt; &lt;span id="qg06954" class="comment"&gt;whehere&lt;/span&gt; &lt;span id="qg06955" class="comment"&gt;game&lt;/span&gt; &lt;span id="qg06956" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg06957" class="comment"&gt;finished&lt;/span&gt; &lt;span id="qg06958" class="comment"&gt;or&lt;/span&gt; &lt;span id="qg06959" class="comment"&gt;not&lt;/span&gt;&lt;br id="qg06960"&gt;&lt;span id="qg06962" class="comment"&gt;     * &lt;/span&gt;&lt;span id="qg06963" class="ST0"&gt;@return&lt;/span&gt; &lt;span id="qg06964" class="comment"&gt;true&lt;/span&gt;&lt;span id="qg06965" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06966" class="comment"&gt;if&lt;/span&gt; &lt;span id="qg06967" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06968" class="comment"&gt;board&lt;/span&gt; &lt;span id="qg06969" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg06970" class="comment"&gt;in&lt;/span&gt; &lt;span id="qg06971" class="comment"&gt;final&lt;/span&gt; &lt;span id="qg06972" class="comment"&gt;state&lt;/span&gt;&lt;br id="qg06973"&gt;&lt;span id="qg06975" class="comment"&gt;     *         &lt;/span&gt;&lt;span id="qg06976" class="comment"&gt;false&lt;/span&gt;&lt;span id="qg06977" class="comment"&gt;, &lt;/span&gt;&lt;span id="qg06978" class="comment"&gt;if&lt;/span&gt; &lt;span id="qg06979" class="comment"&gt;the&lt;/span&gt; &lt;span id="qg06980" class="comment"&gt;board&lt;/span&gt; &lt;span id="qg06981" class="comment"&gt;is&lt;/span&gt; &lt;span id="qg06982" class="comment"&gt;not&lt;/span&gt; &lt;span id="qg06983" class="comment"&gt;in&lt;/span&gt; &lt;span id="qg06984" class="comment"&gt;final&lt;/span&gt; &lt;span id="qg06985" class="comment"&gt;state&lt;/span&gt; &lt;br id="qg06986"&gt;     &lt;span id="qg06987" class="comment"&gt;*/&lt;/span&gt;&lt;br id="qg06988"&gt;    &lt;span id="qg06990" class="keyword-directive"&gt;private&lt;/span&gt; &lt;span id="qg06991" class="keyword-directive"&gt;boolean&lt;/span&gt; isFinished() {&lt;br id="qg06992"&gt;        &lt;span id="qg06994" class="comment"&gt;// Check 1-15 elements whether they are in right position or not&lt;/span&gt;&lt;br id="qg06995"&gt;        &lt;span id="qg06996" class="keyword-directive"&gt;for&lt;/span&gt; (&lt;span id="qg06997" class="keyword-directive"&gt;int&lt;/span&gt; index = WIN.length - 1; index &gt;= 0; index--) {&lt;br id="qg06998"&gt;            String number = board[index / DIM][index % DIM].getText();           &lt;br id="qg061000"&gt;            &lt;span id="qg061001" class="keyword-directive"&gt;if&lt;/span&gt; (!number.equals(WIN[index])) {&lt;br id="qg061002"&gt;                &lt;span id="qg061003" class="keyword-directive"&gt;return&lt;/span&gt; &lt;span id="qg061004" class="keyword-directive"&gt;false&lt;/span&gt;;       &lt;span id="qg061005" class="comment"&gt;// If any of the index is not aligned &lt;/span&gt;&lt;br id="qg061006"&gt;&lt;br id="qg061007"&gt;            }&lt;br id="qg061008"&gt;        }&lt;br id="qg061009"&gt;        &lt;span id="qg061011" class="keyword-directive"&gt;return&lt;/span&gt; &lt;span id="qg061012" class="keyword-directive"&gt;true&lt;/span&gt;;&lt;br id="qg061013"&gt;    }&lt;br id="qg061014"&gt;} &lt;/pre&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b id="l64o"&gt;&lt;/b&gt;&lt;b id="qg061017"&gt;&lt;br id="ns9.1"&gt;&lt;br /&gt;&lt;/b&gt;Comments and suggestions will be great.&lt;br id="ls93"&gt;&lt;br /&gt;&lt;br id="ls930"&gt;&lt;br /&gt;           -Anil Madamala&lt;br id="uh50"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-3157476665496931582?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/3157476665496931582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=3157476665496931582' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/3157476665496931582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/3157476665496931582'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/07/fifteen-puzzle-game-source-code-im.html' title='FifteenPuzzle Game :: SourceCode'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-1743354778460753924</id><published>2008-04-22T12:20:00.000-07:00</published><updated>2008-10-10T23:15:25.208-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='loop unrolling'/><category scheme='http://www.blogger.com/atom/ns#' term='code optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'></title><content type='html'>&lt;h3 id="xi_c" class="post-title entry-title"&gt; &lt;a id="d3eb" href="http://amadamala.blogspot.com/2008/04/loop-unrolling.html"&gt;Loop Unrolling&lt;/a&gt; &lt;/h3&gt;   &lt;big id="f5en"&gt;&lt;font id="ltjq" face="tahoma"&gt;&lt;small id="q1qu"&gt;                      Topic    : Loop Unrolling&lt;br id="sfg."&gt;source of the topic    : &lt;a id="h3um" href="http://www.amazon.com/Complete-Microsoft-Programming-Steve-McConnell/dp/1556154844"&gt;Code Complete2&lt;/a&gt;  &lt;br id="y_.:"&gt;&lt;br id="zapw"&gt;Loop Unrolling, is a technique for optimizing parts of computer programs. The goal of loop unrolling is to reduce the amount of loop housekeeping.&lt;br id="tpa3"&gt;&lt;b id="kdhg"&gt;Note:&lt;/b&gt; Loop unrolling undesirable if you are concerned about readability of the code.&lt;br id="hv4k"&gt;&lt;div id="svh0"&gt;&lt;table id="iaam" bgcolor="#cccccc" border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody id="anv6"&gt;&lt;tr id="d6um"&gt;&lt;td id="hx3j" width="100%"&gt;&lt;big id="f5en"&gt;&lt;font id="ltjq" face="tahoma"&gt;&lt;small id="q1qu"&gt;&lt;font id="v8uf" face="Courier New"&gt;&lt;font id="woxr" color="#009900"&gt;// Example of normal loop&lt;/font&gt;&lt;br id="yx85"&gt;i=0&lt;br id="t-zi"&gt;while ( i &amp;lt; count ) {        &lt;br id="wc10"&gt;    a[ i ] = i;&lt;br id="ibxh"&gt;    i++;&lt;br id="npne"&gt;}&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;/big&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br id="mra:"&gt;&lt;font id="v8uf" face="Courier New"&gt;&lt;br id="n5jo"&gt;&lt;font id="ndt_" face="tahoma"&gt;Use this technique  only when you desire for code optimization. It will severely hurts program readability&lt;br id="oty_"&gt;&lt;br id="bnsb"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;/big&gt;&lt;table id="iaam" bgcolor="#cccccc" border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody id="anv6"&gt;&lt;tr id="d6um"&gt;&lt;td id="hx3j" width="100%"&gt;&lt;big id="f5en"&gt;&lt;font id="ltjq" face="tahoma"&gt;&lt;small id="q1qu"&gt;&lt;font id="v8uf" face="Courier New"&gt;&lt;font id="qr0-" color="#009900"&gt;// Loop unrolled once&lt;/font&gt;&lt;br id="mabl"&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;font id="r8v-" face="tahoma"&gt;&lt;small id="cwjp"&gt;&lt;font id="ie7j" face="Courier New"&gt;i = 0;&lt;br id="dofe"&gt;while ( i &amp;lt; count -1 ) {&lt;br id="ld7:"&gt;    a[ i ] = i;&lt;br id="nu1s"&gt;    a[ i + 1 ] = i + 1;   &lt;font id="l4b6" color="#009900"&gt;// Unrolling once&lt;/font&gt;&lt;br id="b-8t"&gt;    i = i + 2;       &lt;br id="q2tz"&gt;}&lt;br id="jy21"&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;font id="q206" face="tahoma"&gt;&lt;small id="xzi5"&gt;&lt;font id="m855" face="Courier New"&gt;if ( i == count) {     &lt;font id="q0hm" color="#009900"&gt;// &lt;/font&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;/big&gt;&lt;font id="f28c" color="#009900" face="Courier New"&gt;These lines pick up the case &lt;/font&gt;&lt;big id="p4oz"&gt;&lt;font id="potf" face="tahoma"&gt;&lt;small id="wgc4"&gt;&lt;font id="vnpj" face="Courier New"&gt;&lt;br id="f0os"&gt;    a[ i - 1 ] = i - 1;&lt;font id="fqpd" color="#009900"&gt;// that might fall through the&lt;/font&gt; &lt;br id="tc2c"&gt;&lt;font id="fmpc" color="#009900"&gt;&lt;font id="nwlm" color="#000000"&gt;}&lt;/font&gt;                      // cracks if the loop went by &lt;br id="ged5"&gt;                       // twos instead of by ones&lt;/font&gt;&lt;br id="op11"&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;/big&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br id="abql"&gt;&lt;big id="p4oz"&gt;&lt;font id="potf" face="tahoma"&gt;&lt;small id="wgc4"&gt;&lt;font id="vnpj" face="Courier New"&gt;     &lt;br id="y:7m"&gt;    &lt;/font&gt;The technique replaced the original  &lt;font id="hwy3" face="Courier New"&gt;a[ i ] = i&lt;/font&gt;  line with two lines, and &lt;font id="vy26" face="Courier New"&gt;i&lt;/font&gt; is incremented by 2 rather than by 1. The extra code after the while loop is needed when count is odd and the loop has one iteration left after the loop terminates.&lt;/small&gt;&lt;/font&gt;&lt;br id="yr_b"&gt;&lt;font id="mpg_" face="tahoma"&gt;&lt;small id="hgpi"&gt;&lt;font id="zija" face="Courier New"&gt;&lt;font id="tb9o" face="tahoma"&gt;We can see a gain of &lt;b id="u-1s"&gt;43%&lt;/b&gt; in performance with loop unrolling once. &lt;br id="vqfk"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;/big&gt;&lt;big id="f5en"&gt;&lt;font id="ltjq" face="tahoma"&gt;&lt;small id="q1qu"&gt;&lt;font id="v8uf" face="Courier New"&gt;&lt;font id="ndt_" face="tahoma"&gt;&lt;br id="bnsb"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;/big&gt; &lt;table id="iaam" bgcolor="#cccccc" border="0" cellpadding="0" cellspacing="0" width="100%"&gt; &lt;tbody id="anv6"&gt;&lt;tr id="d6um"&gt;&lt;td id="hx3j" width="100%"&gt;&lt;big id="p4oz"&gt;&lt;font id="n37." face="tahoma"&gt;&lt;small id="vlm8"&gt;&lt;font id="ec4r" face="Courier New"&gt;&lt;font id="l.vz" color="#009900"&gt;// Loop unrolled twice&lt;/font&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;font id="i5jk" face="tahoma"&gt;&lt;small id="hsin"&gt;&lt;font id="vfbi" face="Courier New"&gt;&lt;font id="m-nl" face="tahoma"&gt;&lt;font id="ku3f" face="Courier New"&gt;&lt;br id="c7tp"&gt;    i = 0;&lt;br id="vx9b"&gt;    while ( i &amp;lt; count - 2 ) {&lt;br id="m1cg"&gt;       a[ i ] = i;&lt;br id="t046"&gt;       a[ i + 1 ] = i+1;&lt;br id="b30g"&gt;       a[ i + 2 ] = i+2;&lt;br id="sn55"&gt;       i = i + 3;&lt;br id="z3wz"&gt;    }&lt;br id="ogec"&gt;    if ( i &amp;lt;= count - 1 ) {&lt;br id="cscs"&gt;        a[ count - 1 ] = count - 1;&lt;br id="k-vr"&gt;    }&lt;/font&gt;&lt;br id="g5cn"&gt;&lt;font id="om4." face="Courier New"&gt;    if ( i == count - 2 ) {&lt;br id="b9pq"&gt;        a[ count -2 ] = count - 2;&lt;br id="ypmy"&gt;    }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;/big&gt;&lt;br id="g1zl"&gt; &lt;br id="g6zy"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br id="abql"&gt; &lt;br id="jfpp"&gt;&lt;font id="jf5_" face="tahoma"&gt;&lt;small id="af-r"&gt;&lt;font id="h_:i" face="Courier New"&gt;&lt;big id="dm1h"&gt;&lt;font id="ftp9" face="tahoma"&gt;We can see a gain of &lt;b id="g2x2"&gt;43%&lt;/b&gt; in performance with loop unrolling once. &lt;br id="b9t."&gt;&lt;/font&gt;&lt;/big&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;big id="drhk"&gt;&lt;font id="kl_v" face="tahoma"&gt;&lt;small id="uki4"&gt;&lt;font id="sslm" face="Courier New"&gt;&lt;font id="ka8j" face="tahoma"&gt; The results indicate that further loop unrolling can result in further time savings, but not necessarily so, as the Java measurement shows.&lt;br id="jo6q"&gt;&lt;br id="h:o3"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/small&gt;&lt;/font&gt;&lt;/big&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-1743354778460753924?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/1743354778460753924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=1743354778460753924' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/1743354778460753924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/1743354778460753924'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/04/loop-unrolling-topic-loop-unrolling.html' title=''/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-3291469719022289049</id><published>2008-04-18T23:20:00.000-07:00</published><updated>2008-04-22T12:41:00.518-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='while'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='loop unrolling'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='for'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Tips on Using loop statement in Java</title><content type='html'>            &lt;span id="vwzl"&gt;&lt;span id="nuzh"&gt;&lt;b id="dbc3"&gt;Topic&lt;/b&gt;&lt;/span&gt;: Tips on using the loops statements&lt;br id="h4fg"&gt;&lt;span id="bxxb"&gt;&lt;b id="wkd_"&gt;Source of Topic:&lt;/b&gt;&lt;/span&gt; &lt;a title="Amazon.com: Effective Java" target="_blank" href="http://www.amazon.com/exec/obidos/ASIN/0201310058" id="kila"&gt;Effective Java, Programming Language Guide, by Joshua Bloch.&lt;/a&gt; &lt;br id="ete."&gt;&lt;br id="n0_e"&gt;&lt;span id="a:o1"&gt;&lt;b id="h-op"&gt;"The most powerful technique for minimizing the scope of a local variable is to declare it&lt;/b&gt;&lt;/span&gt;&lt;br id="t0mi" style="font-weight: bold;"&gt;&lt;span id="outh"&gt;&lt;b id="nrkz"&gt;where it is first used."&lt;br id="d8hc"&gt;&lt;br id="d8g7"&gt;&lt;/b&gt;&lt;b id="t5ob"&gt;&lt;b id="s.9."&gt;Prefer &lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;span id="outh"&gt;&lt;span id="wasi" style="font-family: Courier New;"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span id="outh"&gt;&lt;b id="t5ob"&gt;&lt;b id="z6dl"&gt; loop over to &lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family: Courier New;" id="outh"&gt;while &lt;font id="nt7q" face="Tahoma"&gt;&lt;b id="igrh"&gt;loop. &lt;br id="gbxm"&gt;Reason: &lt;/b&gt;&lt;/font&gt;&lt;font id="nt7q" face="Tahoma"&gt;&lt;span id="mnms" style="font-family: Courier New;"&gt;for&lt;/span&gt; loop  has a chance of initializing the loop variables, limiting the scope to exact region where they're needed.&lt;br id="dqkl"&gt;&lt;br id="slm2"&gt;For example, here is the preferred way of iterating over a collection:&lt;br id="zzdf"&gt;&lt;div id="mgny"&gt;&lt;table style="width: 790px; height: 67px;" id="xby2" bgcolor="#cccccc" border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody id="ysm5"&gt;&lt;tr id="j83y"&gt;&lt;td id="hqm8" width="100%"&gt;&lt;span id="vwzl"&gt;&lt;span style="font-family: Courier New;" id="outh"&gt;&lt;font id="nt7q" face="Tahoma"&gt;&lt;span id="qplf" style="font-family: Courier New;"&gt;for  ( Iterator i = c.iterator(); i.hasNext(); i++  ) {&lt;/span&gt;&lt;br style="font-family: Courier New;" id="ecaq"&gt;&lt;span id="jbxl" style="font-family: Courier New;"&gt;        doSomething ( i.next() ) ;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="w-kz"&gt;&lt;span id="ao6t" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;To see why this &lt;span id="d7if" style="font-family: Courier New;"&gt;for&lt;/span&gt; loop is preferable to the more obvious &lt;span id="f5cx" style="font-family: Courier New;"&gt;while&lt;/span&gt; loop, consider the following&lt;br id="if75"&gt;code fragment&lt;/span&gt;&lt;br id="zzdf"&gt; &lt;table style="width: 786px; height: 195px;" id="xby2" bgcolor="#cccccc" border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody id="v18q"&gt;&lt;tr id="n:za"&gt;&lt;td id="l3xs" width="100%"&gt;&lt;span id="vwzl"&gt;&lt;span id="gehw" style="font-family: Courier New;"&gt;Iterator i = c.iterator();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="tg.o"&gt;&lt;span id="mfm:" style="font-family: Courier New;"&gt;while (i.hasNext()) {&lt;/span&gt;&lt;br style="font-family: Courier New;" id="ewts"&gt;&lt;span id="hsul" style="font-family: Courier New;"&gt;     doSomething(i.next());&lt;/span&gt;&lt;br style="font-family: Courier New;" id="vhoj"&gt;&lt;span id="p-wx" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;br style="font-family: Courier New;" id="td53"&gt;&lt;span id="ik7d" style="font-family: Courier New;"&gt;...&lt;/span&gt;&lt;br style="font-family: Courier New;" id="l105"&gt;&lt;span id="hze0" style="font-family: Courier New;"&gt;Iterator i2 = c2.iterator();&lt;/span&gt;&lt;br style="font-family: Courier New;" id="izhq"&gt;&lt;span id="kd-j" style="font-family: Courier New;"&gt;while (i.hasNext()) {             &lt;font style="font-family: Tahoma;" id="cfeh" color="#6aa84f"&gt;// BUG!&lt;/font&gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" id="flxn"&gt;&lt;span id="sttq" style="font-family: Courier New;"&gt;     doSomethingElse(i2.next());&lt;/span&gt;&lt;br style="font-family: Courier New;" id="rv6x"&gt;&lt;span id="jpth" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;br style="font-family: Courier New;" id="q-vi"&gt;&lt;br style="font-family: Courier New;" id="tvr."&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br id="j65r"&gt;&lt;span id="vwzl"&gt;Above error is resulted with the habit of cut-and-paste the code: It initializes a new loop variable, i2, but uses the old one, &lt;br id="blwk"&gt;i, which unfortunately is still in scope. Above code doesn't give any compile error or doesn't throw any exception. Runs silently.&lt;br id="jc2r"&gt;Instead of iterating over c2, the second loop terminates immediately, giving the false impression that c2 is empty. Because the &lt;br id="ah6o"&gt;program errs silently, the error can remain undetected for a long time.&lt;br id="dk35"&gt;&lt;br id="xkmw"&gt;If the analogous cut-and-paste error were made in conjunction with the preferred for loop&lt;br id="lusq"&gt;idiom, the resulting code wouldn't even compile. The loop variable from the first loop would&lt;br id="u4:o"&gt;not be in scope at the point where the second loop occurred:&lt;/span&gt;&lt;br id="zzdf"&gt; &lt;table style="width: 791px; height: 190px;" id="xby2" bgcolor="#cccccc" border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody id="ysm5"&gt;&lt;tr id="j83y"&gt;&lt;td id="hqm8" width="100%"&gt;&lt;span id="vwzl"&gt;&lt;span id="yjsr" style="font-family: Courier New;"&gt;for (Iterator i = c.iterator(); i.hasNext(); ) {&lt;/span&gt;&lt;br style="font-family: Courier New;" id="m_bx"&gt;&lt;span id="h_:j" style="font-family: Courier New;"&gt;     doSomething(i.next());&lt;/span&gt;&lt;br style="font-family: Courier New;" id="tqde"&gt;&lt;span id="lc0s" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;br style="font-family: Courier New;" id="q46x"&gt; &lt;span id="qztj" style="font-family: Courier New;"&gt;...&lt;/span&gt;&lt;font id="m6.7" color="#6aa84f"&gt;&lt;br id="yv6-"&gt;&lt;/font&gt;&lt;font id="m-::" color="#6aa84f"&gt;// Compile-time error - the symbol i cannot be resolved&lt;/font&gt;&lt;br id="igvg"&gt;&lt;span id="bur9" style="font-family: Courier New;"&gt;for (Iterator i2 = c2.iterator(); i.hasNext(); ) {&lt;/span&gt;&lt;br style="font-family: Courier New;" id="qtym"&gt;&lt;span id="vc5w" style="font-family: Courier New;"&gt;     doSomething(i2.next());&lt;/span&gt;&lt;br style="font-family: Courier New;" id="bi7x"&gt;&lt;span id="j-y8" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;br style="font-family: Courier New;" id="x998"&gt;&lt;br id="e4e_"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br id="c08o"&gt;&lt;span id="vwzl"&gt;Moreover, if you use the for loop idiom, it's much less likely that you'll make the cut-and-&lt;br id="z2sq"&gt;paste error, as there's no incentive to use a different variable name in the two loops. The loops&lt;br id="j3l4"&gt;are completely independent, so there's no harm in reusing the loop variable name. In fact, it's&lt;br id="xlk2"&gt;stylish to do so.&lt;br id="dk_o"&gt;&lt;br id="zg5i"&gt;&lt;span id="phfj"&gt;&lt;b id="ehyb"&gt;Iterating over random access list&lt;/b&gt;&lt;/span&gt;:  ( example&lt;/span&gt;s of random access lists: ArrayList, Vector etc. )&lt;br id="zzdf"&gt;  &lt;table style="width: 790px; height: 208px;" id="xby2" bgcolor="#cccccc" border="0" cellpadding="3" cellspacing="0"&gt; &lt;tbody id="ysm5"&gt;&lt;tr id="j83y"&gt;&lt;td id="hqm8" width="100%"&gt;&lt;span id="vwzl"&gt;&lt;font id="n.qr" color="#6aa84f"&gt;//Common Practice&lt;/font&gt;&lt;br id="n2.z"&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="ijcb" style="font-family: Courier New;"&gt;for (int i = 0; i &amp;lt; &lt;/span&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="ijcb" style="font-family: Courier New;"&gt;list.size()&lt;/span&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="ijcb" style="font-family: Courier New;"&gt;; i++) {&lt;/span&gt;&lt;br style="font-family: Courier New;" id="dpcs"&gt;&lt;span id="paz0" style="font-family: Courier New;"&gt;    doSomething(list.get(i));&lt;/span&gt;&lt;br style="font-family: Courier New;" id="kb8j"&gt;&lt;span id="nrel" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;br style="font-family: Courier New;" id="u9mf"&gt;&lt;br id="vvzy"&gt;&lt;font id="rnvt" color="#6aa84f"&gt;// High-performance idiom for iterating over random access lists&lt;/font&gt;&lt;br id="o47n"&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="ijcb" style="font-family: Courier New;"&gt;for (int i = 0, &lt;/span&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="ijcb" style="font-family: Courier New;"&gt;list.size();&lt;/span&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="ijcb" style="font-family: Courier New;"&gt; i &amp;lt; &lt;/span&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="ijcb" style="font-family: Courier New;"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="ijcb" style="font-family: Courier New;"&gt;; i++) {&lt;/span&gt;&lt;br style="font-family: Courier New;" id="dpcs"&gt; &lt;span id="paz0" style="font-family: Courier New;"&gt;    doSomething(list.get(i));&lt;/span&gt;&lt;br style="font-family: Courier New;" id="kb8j"&gt; &lt;span id="nrel" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br id="ccc3"&gt;&lt;br id="e4e_"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt; &lt;br id="c08o"&gt; &lt;span id="vwzl"&gt;This idiom is useful for random access List implementations such as &lt;span id="mpjs" style="font-family: Courier New;"&gt;ArrayList&lt;/span&gt; and &lt;span id="s_zz" style="font-family: Courier New;"&gt;Vector&lt;/span&gt;&lt;br id="a9bf"&gt;because it is likely to run faster than the “preferred idiom” above for such lists. The important&lt;br id="fnmg"&gt;thing to notice about this idiom is that it has two loop variables, i and n, both of which have&lt;br id="w6uf"&gt;exactly the right scope. The use of the second variable is essential to the performance of the&lt;br id="cxpz"&gt;idiom. Without it, the loop would have to call the size method once per iteration, which&lt;br id="lbha"&gt;would negate the performance advantage of the idiom. Using this idiom is acceptable when&lt;br id="toz6"&gt;you're sure the list really does provide random access; otherwise, it displays quadratic&lt;br id="itdi"&gt;performance.&lt;br id="iv4s"&gt;&lt;br id="ld78"&gt;&lt;span id="il4p"&gt;&lt;b id="l53b"&gt;Printing the arrays in Java programming language&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br id="zzdf"&gt;  &lt;table style="width: 792px; height: 171px;" id="xby2" bgcolor="#cccccc" border="0" cellpadding="3" cellspacing="0"&gt; &lt;tbody id="ysm5"&gt;&lt;tr id="j83y"&gt;&lt;td id="hqm8" width="100%"&gt;&lt;span id="vwzl"&gt;&lt;font id="eqig" color="#6aa84f"&gt;&lt;span id="il4p"&gt;&lt;font id="c.yg"&gt;// Common practice of printing the array in Java&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span id="il4p"&gt;&lt;br id="bz7x"&gt;&lt;/span&gt;&lt;span id="wec4" style="font-family: Courier New;"&gt;for( int i = 0; i &amp;lt; array.length; i++) {&lt;/span&gt;&lt;br style="font-family: Courier New;" id="kszx"&gt;&lt;span id="mk_7" style="font-family: Courier New;"&gt;    System.out.println(array[i]);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="bkuz"&gt;&lt;span id="a-fi" style="font-family: Courier New;"&gt;}&lt;br id="c-v4"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span id="vwzl"&gt;&lt;span id="a-fi" style="font-family: Courier New;"&gt;&lt;font id="r.kc" color="#38761d" face="Tahoma"&gt;// Best way of printing the array in Java&lt;/font&gt;&lt;br id="h4:j"&gt;&lt;/span&gt;&lt;span id="qoeu" style="font-family: Courier New;"&gt;System.out.println( Arrays.asList(array)   ) ;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br id="c08o"&gt; &lt;span id="vwzl"&gt;&lt;span id="tsnz"&gt;&lt;b id="c:xo"&gt;Loop over an Array in java: &lt;/b&gt;&lt;/span&gt;&lt;br id="fyrh"&gt;&lt;/span&gt;&lt;table style="width: 791px; height: 114px;" id="xby2" bgcolor="#cccccc" border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody id="ysm5"&gt;&lt;tr id="j83y"&gt;&lt;td id="hqm8" width="100%"&gt;&lt;span id="vwzl"&gt;&lt;font id="caax" color="#6aa84f"&gt;// Loop through an Array using &lt;span id="o8e1" style="font-family: Courier New;"&gt;for each&lt;/span&gt;&lt;/font&gt;&lt;br id="r61l"&gt; &lt;span id="pxkb" style="font-family: Courier New;"&gt;for( int intVal :  array ) {&lt;/span&gt;&lt;br style="font-family: Courier New;" id="etgt"&gt; &lt;span id="wu65" style="font-family: Courier New;"&gt;    doSomething(intVal);&lt;/span&gt;&lt;br style="font-family: Courier New;" id="vzvr"&gt; &lt;span id="mccr" style="font-family: Courier New;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br id="iyir"&gt;&lt;span id="vwzl"&gt;&lt;br id="cu8e"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-3291469719022289049?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/3291469719022289049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=3291469719022289049' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/3291469719022289049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/3291469719022289049'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/04/tips-on-using-loop-statement-in-java.html' title='Tips on Using loop statement in Java'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-8179101629073441152</id><published>2008-04-01T00:17:00.001-07:00</published><updated>2008-04-14T13:21:21.166-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='divide and conquer'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='binary search'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Divide and Conquer algorithms, trick</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span style="font-size:100%;"&gt;Possible mistake in implementing Divide and Conquer algorithms is, In many cases you may need to divide the input range.&lt;br /&gt;&lt;br /&gt;Take Binary search as an example:&lt;br /&gt;in each step we need to calculate "mid".&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#009900;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;//Common practice of doing this:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;// Broke - if  (start + end) &gt; Integer.MAX_VALUE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;// Mid value will be assigned with -ve value.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-family:courier new;"&gt;mid = (start + end) / 2; &lt;/span&gt;     &lt;/span&gt;&lt;span&gt;&lt;span&gt;                                                &lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#009900;"&gt;// Better way to avoid the problem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;mid = start + (end - start)/2 ;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-8179101629073441152?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/8179101629073441152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=8179101629073441152' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/8179101629073441152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/8179101629073441152'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/04/divide-and-conquer-algorithms-trick.html' title='Divide and Conquer algorithms, trick'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-8366979094227769861</id><published>2008-04-01T00:02:00.001-07:00</published><updated>2008-04-14T13:23:07.510-07:00</updated><title type='text'>checking the oddity of a integer number in java</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;From Jashua Bloch's "Java Puzzlers" book.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="color:#009900;"&gt;// Worng way to check the oddity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span&gt;public boolean isOdd(int num){&lt;/span&gt;&lt;br /&gt;&lt;span&gt;return (num % 2 == 1)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span style="color:#009900;"&gt;&lt;span&gt;/&lt;span&gt;/ Broken- for all -ve odd numbers&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="color:#009900;"&gt;// Right Solution&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span&gt;public boolean isOdd(int num){&lt;/span&gt;&lt;br /&gt;&lt;span&gt;return (num % 2 != 0)     &lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="color:#009900;"&gt;// Much better and Faster&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span&gt;public boolean isOdd(int num){&lt;/span&gt;&lt;br /&gt;&lt;span&gt;return (num &amp;amp; 1)       &lt;/span&gt;&lt;br /&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-8366979094227769861?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/8366979094227769861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=8366979094227769861' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/8366979094227769861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/8366979094227769861'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/04/checking-oddity-of-integer-number-in.html' title='checking the oddity of a integer number in java'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-1540212197288492033</id><published>2008-03-12T08:35:00.000-07:00</published><updated>2008-06-11T18:59:34.732-07:00</updated><title type='text'>Binary Search in java by Joshua Bloch</title><content type='html'>&lt;font id="yl3z" face="courier new"&gt;&lt;font id="yl3z0" size="3"&gt;&lt;font id="yl3z1"&gt;&lt;font id="yl3z2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;pre id="yl3z3"&gt;&lt;div id="b:5c"&gt;&lt;div id="wcj6"&gt;&lt;br id="wcj60"&gt;&lt;/div&gt;&lt;br id="rikk"&gt;&lt;/div&gt;&lt;div id="t79y"&gt;&lt;table id="wxl1" width="478" bgcolor="#cccccc" border="1" bordercolor="#0b5394" cellpadding="3" cellspacing="0" height="376"&gt;&lt;tbody id="t79y0"&gt;&lt;tr id="t79y1"&gt;&lt;td id="t79y2" width="100%"&gt;&lt;pre id="yl3z3"&gt;&lt;pre id="b:5c3"&gt;1:     public static int binarySearch(int[] a, int key) {&lt;br id="b:5c4"&gt;2:         int low = 0;&lt;br id="b:5c5"&gt;3:         int high = a.length - 1;&lt;br id="b:5c6"&gt;4:&lt;br id="b:5c7"&gt;5:         while (low &amp;lt;= high) {&lt;br id="b:5c8"&gt;6:             int mid = (low + high) / 2;&lt;br id="b:5c9"&gt;7:             int midVal = a[mid];&lt;br id="b:5c10"&gt;8:&lt;br id="b:5c11"&gt;9:             if (midVal &amp;lt; key)&lt;br id="b:5c12"&gt;10:                 low = mid + 1&lt;br id="b:5c13"&gt;11:             else if (midVal &amp;gt; key)&lt;br id="b:5c14"&gt;12:                 high = mid - 1;&lt;span id="t79y3" style="background-color: rgb(153, 153, 153);"&gt;&lt;/span&gt;&lt;br id="b:5c15"&gt;13:             else&lt;br id="b:5c16"&gt;14:                 return mid; // key found&lt;br id="b:5c17"&gt;15:         }&lt;br id="b:5c18"&gt;16:         return -(low + 1);  // key not found.&lt;br id="b:5c19"&gt;17:     }&lt;/pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br id="yl3z20"&gt;&lt;/pre&gt;The bug is in this line: &amp;nbsp; &lt;font id="yl3z22" size="2" face="courier new"&gt;            &lt;font id="yl3z23"&gt;&lt;font id="yl3z24"&gt;&lt;font id="yl3z25"&gt;int mid =(low + high) / 2;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font id="yl3z26"&gt;&lt;font id="yl3z27"&gt;&lt;br id="yl3z28"&gt;&lt;br id="yl3z29"&gt;&lt;font id="yl3z30" size="2"&gt;It&lt;br /&gt;fails for large values of the int variables low and high. Specifically,&lt;br /&gt;it fails if the sum of low and high is greater than the maximum&lt;br /&gt;positive int value (pow(2 , 31) - 1). The sum overflows to a negative&lt;br /&gt;value, and the value stays negative when divided by two. In C this&lt;br /&gt;causes an array index out of bounds with unpredictable results. In&lt;br /&gt;Java, it throws &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font id="yl3z31" size="2"&gt;&lt;font id="yl3z32"&gt;&lt;font id="yl3z33"&gt;ArrayIndexOutOfBoundsException&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font id="yl3z34"&gt;&lt;font id="yl3z35"&gt;&lt;font id="yl3z36" size="2"&gt;.&lt;/font&gt;&lt;br id="yl3z37"&gt;&lt;br id="yl3z38"&gt;So what's the best way to fix the bug? Here's one way:&lt;br id="yl3z39"&gt;&lt;br id="yl3z40"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-family: Courier New;" id="yl3z41" size="2"&gt;&lt;font id="yl3z42"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font style="font-family: Courier New;" id="yl3z43" size="2"&gt;&lt;font id="yl3z44"&gt;&lt;font id="yl3z45"&gt;&lt;font id="yl3z46"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;font id="yl3z47"&gt;&lt;font id="yl3z48"&gt;int mid = low + ((high - low) / 2);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font id="yl3z49"&gt;&lt;font id="yl3z50"&gt;&lt;br id="yl3z51"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font id="yl3z52"&gt;&lt;font id="yl3z53"&gt;&lt;br id="yl3z54"&gt;Probably faster, and arguably as clear is:&lt;br id="yl3z55"&gt;&lt;br id="yl3z56"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-family: Courier New;" id="yl3z57" size="2"&gt;&lt;font id="yl3z58"&gt;&lt;font id="yl3z59"&gt;&lt;font id="yl3z60"&gt;&amp;nbsp;           int mid = (low + high) &amp;gt;&amp;gt;&amp;gt; 1;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font id="yl3z61"&gt;&lt;font id="yl3z62"&gt;&lt;br id="yl3z63"&gt;&lt;/font&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-1540212197288492033?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/1540212197288492033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=1540212197288492033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/1540212197288492033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/1540212197288492033'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/03/binary-search-in-java-by-joshua-bloch.html' title='Binary Search in java by Joshua Bloch'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-8762337271904332216</id><published>2008-02-29T17:42:00.000-08:00</published><updated>2008-02-29T17:54:09.656-08:00</updated><title type='text'>How to design a good API and Why it matters</title><content type='html'>&lt;a href="http://www.scribd.com/doc/33655/How-to-Design-a-Good-API-and-Why-it-Matters?ga_related_doc=1"&gt;&lt;span style="font-weight:bold;"&gt;How to Design a Good API and Why it Matters&lt;/span&gt; &lt;/a&gt; by Joshua Bloach(author of Effective Java)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-8762337271904332216?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/8762337271904332216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=8762337271904332216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/8762337271904332216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/8762337271904332216'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2008/02/how-to-design-good-api-and-why-it.html' title='How to design a good API and Why it matters'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-3879562499142545702</id><published>2007-12-05T21:45:00.000-08:00</published><updated>2008-04-14T13:24:10.567-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='distributed computing'/><title type='text'>The Eight Fallacies of Distributed Computing</title><content type='html'>&lt;a href="http://blogs.sun.com/jag/resource/Fallacies.html"&gt;Fallacies I have seen at James Gosling's blog&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:verdana;"&gt;1.  The network is reliable&lt;br /&gt;2.  Latency is zero&lt;br /&gt;3.  Bandwidth is infinite&lt;br /&gt;4.  The network is secure&lt;br /&gt;5.  Topology doesn't change&lt;br /&gt;6.  There is one administrator&lt;br /&gt;7.  Transport cost is zero&lt;br /&gt;8.  The network is homogeneous&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-3879562499142545702?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/3879562499142545702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=3879562499142545702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/3879562499142545702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/3879562499142545702'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2007/12/eight-fallacies-of-distributed.html' title='The Eight Fallacies of Distributed Computing'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6232182874900860400.post-7207167053934046545</id><published>2007-07-16T20:28:00.000-07:00</published><updated>2007-07-16T20:28:41.349-07:00</updated><title type='text'>Quotationary</title><content type='html'>&lt;a href="http://quotationary.blogspot.com/"&gt;Quotationary&lt;/a&gt;: "Regret - HARRY S. TRUMAN&lt;br /&gt;Never, never waste a minute on regret. It's a waste of time."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6232182874900860400-7207167053934046545?l=amadamala.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://quotationary.blogspot.com/' title='Quotationary'/><link rel='replies' type='application/atom+xml' href='http://amadamala.blogspot.com/feeds/7207167053934046545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6232182874900860400&amp;postID=7207167053934046545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/7207167053934046545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6232182874900860400/posts/default/7207167053934046545'/><link rel='alternate' type='text/html' href='http://amadamala.blogspot.com/2007/07/quotationary.html' title='Quotationary'/><author><name>amadamala</name><uri>http://www.blogger.com/profile/16967182588637931269</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
