Java puzzles
5 отговора
0 прегледа
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 битов Дебиан, та може и с това да е свързано...
Чета в момента книгата "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
Здравей,
предполагам че е от Eclipse-a, тъй като при мен си върви безкрайно, нищо не изкарва. Aз ползвам JDeveloper.
Успех!
предполагам че е от Eclipse-a, тъй като при мен си върви безкрайно, нищо не изкарва. Aз ползвам JDeveloper.
Успех!
аз от джава не разбирам много, но
защо цикълът в първия пример да е безкраен?
компилатора ли го оптимизира на безкраен предвид огромните числа? няма да е зле да си дръпна sdk-to и да пробвам нещо.
съжалявам за може би тъия въпрос!
съжалявам за може би тъия въпрос!
Re: аз от джава не разбирам много, но
Java-та има "особеност", че
Integer.MAX_VALUE + 1 = Integer.MIN_VALUE
т.е. стигайки до макс стойност и добавяйки 1, то индекса става мин сотйност.
Незнам дали го обясних както трябва, дано :-)
Integer.MAX_VALUE + 1 = Integer.MIN_VALUE
т.е. стигайки до макс стойност и добавяйки 1, то индекса става мин сотйност.
Незнам дали го обясних както трябва, дано :-)