windguru Δημοσ. 19 Απριλίου 2008 Δημοσ. 19 Απριλίου 2008 Αναρωτιόμουν γιατί ένα τέτοιο πρόγραμμα να έχει πρόβλημα, βάζοντάς του λάθος δεδομένα, δηλαδή διάφορα από 1,2,3,4,5... import java.io.*; public class demo { public static void main(String args[]) throws IOException { char ch=(char)System.in.read(); while ((ch!='1')&&(ch!='2')&&(ch!='3')&&(ch!='4')&&(ch!='5')) { System.out.print("lathos epilogi"); ch=(char)System.in.read(); } switch(ch) { case '1': System.out.println("-----1------");break; case '2': System.out.println("-----2----");break; case '3': System.out.println("-----3---");break; case '4': System.out.println("-----4---");break; case '5': System.exit(0); } } } Δηλαδή, εμφανίζει το "λαθος επιλογή" περισσότερες φορές απότι θα έπρεπε Μπορεί να βοηθήσει κανείς????
edhunter Δημοσ. 19 Απριλίου 2008 Δημοσ. 19 Απριλίου 2008 το δοκιμασα το προγραμμα και δεν μπορω να καταλαβω γιατι μπαινει 2 φορες στο loop. για καποιο λογο παιρνει την 2η φορα ενα κενο char.. αν δεν σε υποχρεωνει καποιος να γραψεις το προγραμμα ετσι τοτε καλητερα να χρησημοποιησεις την κλαση Scanner με string η int αντι για char..
Moderators Praetorian Δημοσ. 19 Απριλίου 2008 Moderators Δημοσ. 19 Απριλίου 2008 > while ((ch!='1')&&(ch!='2')&&(ch!='3')&&(ch!='4')&&(ch!='5')) Στην περίπτωση που βάζεις κάποιον χαρακτήρα εκτός των '1', '2' ,'3' ,'4' ,'5' τότε το πρόγραμμά σου μπαίνει στο loop με το "la8os epilogh". Και αυτό που κάνει είναι να συνεχίζει να παιρνει ένα χαρακτήρα από την είσοδο μέχρι να μην υπάρχει άλλος (διαθέσιμος) οπότε θα περιμένει για είσοδο. Το πρόβλημά σου είναι ότι γενικά όταν εισάγεις ένα χαρακτήρα πχ 'a' και πατάς enter, η είσοδος έχει και κάποιους "κρυφούς" χαρακτήρες. Συνολικά: 'a', '\r', '\n' (Carriage return και αλλαγή γραμμής) Και σου εμφανίζεται τρεις φορές το "la8os epilogh" (και κατόπιν περιμένει νέα είσοδο). (Αυτό βέβαια δεν συμβαίνει όταν εισάγεις κάποιον από τους '1', '2' ,'3' ,'4' ,'5' γιατί το πρόγραμμά σου τότε παρακάμπτει άμεσα το loop και κατόπιν τερματιζεται). Μπορείς να κάνεις το εξής λοιπόν: > while ((ch!='1')&&(ch!='2')&&(ch!='3')&&(ch!='4')&&(ch!='5')&&(ch!='\r')&&(ch!='\n')) Αυτό θα περιορίσει σε μια φορά την εμφάνιση του "la8os epilogh", αλλά το πρόγραμμα μετά (όταν βρει το '\r') θα φύγει από το while loop και θα τερματιστεί. Γενικά, αν θέλεις το πρόγραμμα να τερματιζεται μόνο με '5' στην είσοδο πρέπει να κάνεις και κάποιες άλλες διορθώσεις στη λογική του.
windguru Δημοσ. 19 Απριλίου 2008 Μέλος Δημοσ. 19 Απριλίου 2008 Ευχαριστώ πολύ για την βοήθεια και των δυο σας. Αυτο ήταν απλοποιημένη έκδοση του προβλήματος μου. Το προγραμμά μου λειτουργει αρκετά σωστά πλέον!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.