Page 1 of 1

Εργασία Java

Posted: Wed Nov 10, 2004 4:18 pm
by Paralias
Χαιρετώ!Να ρωτήσω κάτι για τη Java;Στην πρώτη εργασία χρησιμοποίησα ενα if για να απορίπτω τις αρνητικές τιμές των δευτερολέπτων.Έγραψα λοιπόν:

Code: Select all

if (seconds<0)
         System.out.println("Dwsate lathos timi!Parakalw dwste thetiki timi");
else{...εντολές...}
Όλα καλά μέχρι εδώ.Ήθελα όμως να απορρίπτω και τις τιμές που είναι μεγαλύτερες από 86400 δευτερόλεπτα γιατί 86400 sec έχει μία μέρα.Και τότε έγραψα:
if (seconds<0)|(seconds>86400)
         System.out.println("Dwsate lathos timi!Parakalw dwste timi anamesa sto 0 kai 86400");
else{...εντολές...}
αλλά μου έβγαζε συντακτικό λάθος.Γιατιιιιιιιιιιιιιιιιιιιιιιιι;;;;;;; :!:

Re: Εργασία Java

Posted: Wed Nov 10, 2004 4:41 pm
by Ethel

Code: Select all

if (seconds<0)
         System.out.println("Dwsate lathos timi!Parakalw dwste thetiki timi");
else{...εντολές...}
if ((seconds<0)||(seconds>86400)) //αλλαγή εδώ
         System.out.println("Dwsate lathos timi!Parakalw dwste timi anamesa sto 0 kai 86400");
else{...εντολές...}
Για δοκίμασέ το έτσι

Posted: Thu Nov 11, 2004 1:09 pm
by tsilochr
Θα γράψω περίπου το ίδιο με την ethel

Code: Select all

if ( (seconds<0) || (seconds>86400) ) 
Πρέπει ολόκληρη η συνθήκη " (seconds<0) || (seconds>86400)" να είναι μέσα σε παρενθέσεις

Posted: Thu Nov 11, 2004 1:18 pm
by Einherjar
είναι μέσα σε παρενθέσεις

Posted: Thu Nov 11, 2004 1:23 pm
by Ethel
tsilochr.... δεν προσέχεις... :razz:

Posted: Thu Nov 11, 2004 2:21 pm
by Ganther
Σωστη η εθελ. Το δοκιμασα στο Jbuilder. Αμεσως αυτο εβγαλε... :) :)

Posted: Thu Nov 11, 2004 2:54 pm
by Paralias
Ευχαριστώ πολύ παιδιά!Πάντως το λάθος δεν ήταν για το αν θα χρησιμοποιήσω δύο || ή ένα |. Έχει συντακτική σημασία.Αν χρησιμοποιήσω ένα | τότε εξετάζεται η πρώτη συνθήκη και αν βρεθεί true συνεχίζει και εξετάζει την επόμενη.Αν όμως χρησιμοιήσω δύο || τότε αν η πρώτη συνθήκη βρεθεί true δεν εξετάζεται η επόμενη.Βέβαια στη συγκεκριμένη περίπτωση δεν έχει καμία διαφορά,απλά έτσι το ανέφερα.Ευχαριστώ και πάλι! :smile:

Posted: Thu Nov 11, 2004 3:48 pm
by Einherjar
είσαι σίγουρος γι'αυτό που λες? όταν υπάρχει λογικό OR τότε αρκεί ένας από τους τελεσταίους να είναι αληθής για να είναι ολόλκηρη η συνθήκη αληθής. Οπότε αν το πρώτο είναι αληθές, ολόκληρο θα είναι αληθες.

Posted: Thu Nov 11, 2004 3:48 pm
by HdkiLLeR
Paralias wrote:Ευχαριστώ πολύ παιδιά!Πάντως το λάθος δεν ήταν για το αν θα χρησιμοποιήσω δύο || ή ένα |. Έχει συντακτική σημασία.Αν χρησιμοποιήσω ένα | τότε εξετάζεται η πρώτη συνθήκη και αν βρεθεί true συνεχίζει και εξετάζει την επόμενη.Αν όμως χρησιμοιήσω δύο || τότε αν η πρώτη συνθήκη βρεθεί true δεν εξετάζεται η επόμενη.Βέβαια στη συγκεκριμένη περίπτωση δεν έχει καμία διαφορά,απλά έτσι το ανέφερα.Ευχαριστώ και πάλι! :smile:
H διαφορά είναι στο ότι το || είναι λογικός τελεστής σύγκρισης. Κοινώς first || second σημαίνει εάν το first ή το second είναι true -> return true. Tο | είναι και αυτός τελεστής αλλά όχι λογικός. Είναι το bitwise or.

Posted: Thu Nov 11, 2004 9:18 pm
by Ethel
Ganther wrote:Σωστη η εθελ. Το δοκιμασα στο Jbuilder. Αμεσως αυτο εβγαλε... :) :)
:smt024 ----> :smt023
hdkiller wrote:H διαφορά είναι στο ότι το || είναι λογικός τελεστής σύγκρισης. Κοινώς first || second σημαίνει εάν το first ή το second είναι true -> return true. Tο | είναι και αυτός τελεστής αλλά όχι λογικός. Είναι το bitwise or.
το οποίο bitwise or τι κάνει;

Posted: Thu Nov 11, 2004 10:14 pm
by Einherjar
είναι αυτό που κάναμε στην αρχιτεκτονική Η/Υ (ή κατά άλλους ψηφιακή σχεδίαση) όπου παίρνεις 2 bits και τα παιρνάς από πύλη OR

Posted: Thu Nov 11, 2004 10:33 pm
by Ganther
Chin chan chon, και ειμαι 3οετης... καλα παμε... :) :) :P

(αληθεια ποσο θελετε για ιδιαιτερα?? :oops: )

Posted: Thu Nov 11, 2004 10:48 pm
by Ethel
Για αρχή ας πάμε στο workshop να μας μάθουν κάτι για linux και τα υπόλοιπα φαντάζομαι θα τα "διδάξουν" εν καιρώ... :smt045

Posted: Sat Nov 13, 2004 1:04 pm
by HdkiLLeR
Ethel wrote:το οποίο bitwise or τι κάνει;
Όπως είπε και ο Einherjar παραπάνω απλά περνάει τις τιμές μέσα απο ένα OR(κάνει OR ένα ένα τα bit της τιμής). Η Java αν και δεν είναι η καλύτερη γλώσα για τέτοιου είδους low level operations διαθέτει αρκετούς τελεστές. Πχ ολίσθηση(shift-για να κάνεις αμέσως 2* και να μην χρησιμοποιείς MUL κλπ κλπ), OR, AND και πολλά άλλα τα οποία σπάνια χρησιμοποιείς αλλά πολλές φορές χρειάζονται.

Posted: Sat Nov 13, 2004 6:29 pm
by Ethel
Μάλιστα... Thanks παιδιά για τη διαφώτιση :-D

Posted: Sat Nov 13, 2004 7:59 pm
by Paralias
Αυτό που είπα παραπάνω για τη διαφορά | και || το έχω διαβάσει σε βιβλίο και συγκεκριμένα γράφει: Παράδειγμα:
boolean unusual = (grimThoughts>10)||(girlfriendAge>75);
και μετά επεξηγεί:Παρατηρήστε τη χρήση του || αντί του |.Λόγω αυτής της χρήσης, αν η grimThoughts>10 είναι true,τότε η unusual τίθεται σε true και η δεύτερη έκφραση δεν αποτιμάται.
Όταν το διάβασα αυτό δεν κατάλαβα γιτί το λέει αφού αρκεί μία έκφραση να είναι true για να είναι όλη η πρόταση true.Αν βρει την πρώτη έκφραση false,τότε θα προχωρήσει στην επόμενη έκφραση.Άρα δεν έχει νόημα αυτό που γράφει το βιβλίο,σωστά;;;Anyway!Το βιβλίο είναι:"Πλήρες εγχειρίδιο της Java 2"

Posted: Sat Nov 13, 2004 8:27 pm
by vagalati
Κοίταξε, παρατήρησε τις δύο παρακάτω εντολές:

Code: Select all

boolean unusual = (grimThoughts>10) || (test.isTrue()); 

Code: Select all

boolean unusual = (grimThoughts>10) | (test.isTrue()); 
Στην πρώτη περίπτωση η συνάρτηση isTrue θα εκτελεστεί μόνο αν η πρώτη συνθήκη είναι true. Ενώ στη δεύτερη θα εκτελείται πάντα!
Η διαφορά είναι ότι στην πρώτη περίπτωση ο παραγώμενος κώδικας είναι branch υπο συνθήκη για κάθε μια συνθήκη απο την πρώτη στη τελευταία ενώ στη δεύτερη είναι πρώτα bitwise OR στα αποτελέσματα και μετά συνθήκη επι του τελικού αποτελέσματος. Όσοι έχουν κάνει μεταγγλωτιστές ας θυμηθούν λίγο την παραγωγή κώδικα...