Java puzzles

5 отговора 0 прегледа
#1

Java puzzles

Здравейте!

Чета в момента книгата "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 битов Дебиан, та може и с това да е свързано...

Отговор
в отговор на puzzler #2

Re: Java puzzles

Здравей,

предполагам че е от Eclipse-a, тъй като при мен си върви безкрайно, нищо не изкарва. Aз ползвам JDeveloper.

Успех!

Отговор
в отговор на EroS #3

Re: Java puzzles

Aз пак ви препоръчвам ItelliJ IDEA

Отговор
в отговор на puzzler #4

Re: Java puzzles

Благодаря за отговорите - явно ще пробвам с друга среда :-)

Отговор
в отговор на puzzler #5

аз от джава не разбирам много, но

защо цикълът в първия пример да е безкраен? компилатора ли го оптимизира на безкраен предвид огромните числа? няма да е зле да си дръпна sdk-to и да пробвам нещо.
съжалявам за може би тъия въпрос!

Отговор
в отговор на hmm #6

Re: аз от джава не разбирам много, но

Java-та има "особеност", че
Integer.MAX_VALUE + 1 = Integer.MIN_VALUE
т.е. стигайки до макс стойност и добавяйки 1, то индекса става мин сотйност.

Незнам дали го обясних както трябва, дано :-)

Отговор