Έχουν δημοσιευτεί Σάββατο, 18 Νοεμβρίου 2006 9:01 μμ από το μέλος PALLADIN

Looper Code Puzzle....???

Θέλω να μεταφέρω ένα ωραίο code puzzle από το βιβλίο Java Puzzlers (traps, pitfalls and corner cases)...

Έχουμε τον παρακάτω κώδικα

while(i == i + 1) {}

Τι τύπο και τι initialization πρέπει να έχει το i για να έχουμε ένα ωραίο infinite loop...????

Share


Ενημέρωση για Σχόλια

Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ

Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη Τροφοδοσία RSS με σχόλια

Σχόλια:

 

George J. Capnias έγραψε:

Boolean & false?


George J.
Νοεμβρίου 19, 2006 3:39 πμ
 

γιωργος μπακογιαννης έγραψε:

Επειδή στα μαθηματικά άπειρο και κάτι, κάνει πάλι άπειρο και επειδή οι αριθμοί κινητής υποδιαστολής πλέον υποστηρίζουν θετικό και αρνητικό άπειρο, άρα

άπειρο== άπειρο+1 =>

float.PositiveInfinity= float.PositiveInfinity+1,
double.PositiveInfinity= double.PositiveInfinity+1

Νοεμβρίου 19, 2006 8:07 πμ
 

skynyrd frynd έγραψε:

Καλό.
Με παίδεψε το puzzle αν και υποψιαζόμουν αρχικά ότι κάτι πρέπει να παίζει με τον τρόπο χειρισμού των πραγματικών (ποτέ δύο πραγματικοί δεν είναι ίσοι), αλλά δεν μπορούσα να βρώ την αρχική τιμή.
Μετά δοκίμασα μήπως ισχύει αν αντικαταστήσουμε τον λογικό τελεστή ή με το + οπότε με i = 1 έχουμε 1 Ή 1 == 1, αλλά δυστυχώς δεν έκανε compile.

Τελικά την λύση έδωσε το google στο πρώτο κιόλας αποτέλεσμα.

http://www.google.gr/search?q=Java+Puzzlers

Δεν πειράζει. Ωραία σπασοκεφαλιά.
Μην ξεχάσω. το ίδιο έχουμε αν αντικαταστήσουμε το Java με C#.

Νοεμβρίου 19, 2006 5:03 μμ
 

PALLADIN έγραψε:

Όντως η λύση είναι με τους floating point αριθμούς

double i = Double.PositiveInfinity;
double i = 1.0 / 0.0;

ή εναλακτικά μια πολύ μεγάλη double/float τιμή
double i = Double.MaxValue;
Νοεμβρίου 19, 2006 7:15 μμ
 

rousso έγραψε:

Λοιπόν αν και δεν είμαι Java τύπος... κάτι δεν πάει καλά με το puzzle σου αγαπητέ μου...

Το Puzzle σου ΕΙΝΑΙ ένα infinite loop από μόνο του οποιοσδήποτε και να είναι ο τύπος του i (αρκεί να κάνει compile)...

Δεν βλέπω πουθενά να αλλάζεις το i και άρα όσο και να είναι το i πάντα θα είναι διαφορετικό από το i + 1.

ΕΚΤΟΣ:
α) αν έχεις κάνει overload τον + operator ή
β) αν η ερώτησή σου ήταν "ποιός θα πρέπει να είναι ο τύπος και το init του i ώστε να ΜΗΝ έχουν εχουμε ένα infinite loop)" και απλά έκανες λάθος ερώτηση ή
γ) αν δεν βλέπω καλά και δεν κατάλαβα το catch...
Νοεμβρίου 21, 2006 7:35 μμ
 

PALLADIN έγραψε:

Για σου φιλε Γιάννη
το puzzle νομίζω ότι είναι ξεκάθαρο.

"φαίνεται" ότι το body του while loop δεν πρόκειται να εκτελεστεί ποτε καθώς κανένας αριθμός δεν ισούται με τον εαυτό του + 1.
Νοεμβρίου 21, 2006 10:32 μμ
 

rousso έγραψε:

χαχα!!!
λοιπόν δεν το πρόλαβα!

Είδες αμα βιάζεσαι!

έπαθα εγώ συτό που νόμιζα ότι έπαθες εσύ...

Το είδα φεύγοντας από το γραφείο και έριξα ένα σχόλιο στα γρήγορα...

Στο δρόμο καθώς οδηγούσα, συνειδητοποίησα ότι αυτό που έγραψα ήταν το ακριβώς αντίθετο από αυτό που έπρεπε και ότι στην ουσία έπαθα αυτό που νόμισα στην αρχή ότι έπαθες εσύ...

θα είχα δίκιο αν η σχέση ήταν != και όχι == (όπως έχεις στο puzlle) και ορθώς βέβαια το loop δεν τρέχει ποτέ εκτός αν... κλπ

anyway...
Γι' αυτό μπήκα τώρα να δω αν πρόλαβε να δει κανείς το πάθημά μου...

χεχε....
sorry...
Νοεμβρίου 21, 2006 11:10 μμ
 

PALLADIN έγραψε:

It's cool, don't worry
το ωραίο με αυτά τα puzzle είναι ότι έχουν μια "ενδιαφέρουσα" κυκλικότητα

"Στο δρόμο καθώς οδηγούσα, συνειδητοποίησα ότι αυτό που έγραψα ήταν το ακριβώς αντίθετο από αυτό που έπρεπε και ότι στην ουσία έπαθα αυτό που νόμισα στην αρχή ότι έπαθες εσύ... "

Και η περιγραφή σου έχει μια "ενδιαφέρουσα" κυκλικότητα

Happy Coding my friend
Νοεμβρίου 22, 2006 10:55 πμ

Ποιά είναι η άποψή σας για την παραπάνω δημοσίευση;

(απαιτούμενο)
απαιτούμενο
προαιρετικό
απαιτούμενο
ÅéóÜãåôå ôïí êùäéêü:
CAPTCHA Image