|
Тема
|
Java puzzles
|
|
Автор | puzzler (Нерегистриран) |
Публикувано | 15.08.07 12:30 |
|
Здравейте!
Чета в момента книгата "Java Puzzlers: Traps, Pitfalls and Corner Cases" на Joshua Bloch и NealGafter. Попаднах на една странна за мен ситуация:
Следващия код представлява безкраен цикъл и се изпълнява според очакванията - т.е. броя на извикванията не се изписва никога:
public class InTheLoop {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 100;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++)
count++;
System.out.println(count);
}
}
А следващия код, който според мен би трябвало да се държи по същия начин, изписва 101:
public static void main(String[] args) {
int END = Integer.MAX_VALUE;
int START = END - 100;
int count = 0;
for (int i = START; i <= END; i++)
count++;
System.out.println(count);
}
Това е във връзка с puzzle 28. Доста време се чудя и не намирам обяснение...
Единственото, което ми идва на ума е някаква оптимизация, тъй като се държи различно при дебъг... Работя на Еклипс под 64 битов Дебиан, та може и с това да е свързано...
| |
Тема
|
Re: Java puzzles
[re: puzzler]
|
|
Автор |
EroS (непознат
) |
Публикувано | 16.08.07 11:17 |
|
Здравей,
предполагам че е от Eclipse-a, тъй като при мен си върви безкрайно, нищо не изкарва. Aз ползвам JDeveloper.
Успех!
| |
Тема
|
Re: Java puzzles
[re: EroS]
|
|
Автор |
blRKOFF (JavaScientific) |
Публикувано | 16.08.07 14:59 |
|
Aз пак ви препоръчвам ItelliJ IDEA
| |
Тема
|
Re: Java puzzles
[re: puzzler]
|
|
Автор | puzzler (Нерегистриран) |
Публикувано | 17.08.07 10:50 |
|
Благодаря за отговорите - явно ще пробвам с друга среда :-)
| |
Тема
|
аз от джава не разбирам много, но
[re: puzzler]
|
|
Автор | hmm (Нерегистриран) |
Публикувано | 31.08.07 11:11 |
|
защо цикълът в първия пример да е безкраен? компилатора ли го оптимизира на безкраен предвид огромните числа? няма да е зле да си дръпна sdk-to и да пробвам нещо.
съжалявам за може би тъия въпрос!
| |
Тема
|
Re: аз от джава не разбирам много, но
[re: hmm]
|
|
Автор |
EroS (непознат
) |
Публикувано | 31.08.07 13:58 |
|
Java-та има "особеност", че
Integer.MAX_VALUE + 1 = Integer.MIN_VALUE
т.е. стигайки до макс стойност и добавяйки 1, то индекса става мин сотйност.
Незнам дали го обясних както трябва, дано :-)
| |
|
|
|
|