elis88 Δημοσ. 28 Φεβρουαρίου 2008 Δημοσ. 28 Φεβρουαρίου 2008 Γεια σας παιδεια, αντιμετοπίζω ενα προβληματάκι στη java. Και δεν μπορω να καταλάβω τι συμβαίνει. Λοιπόν, έχω φτιάξει σε μία μέθοδο κάποιες εντολίτσες, όπου η κάθε μία κάνει κάποια λειτουργεία. Όταν όμως το τρέχω μερικές εντολές για να τις τρέξει δεν τιν πέρνει με τιν μία αλλα πρέπει να τις γράπψεις 3-4 φορές. ο Κωδικάς μου είναι αυτός: >import java.util.Scanner; public class Main { public static void main(String args[]) { Input start = new Input(); Scanner insert = new Scanner(System.in); boolean state =false; boolean login=false; System.out.println("Entoles: !register, !log in, !remove, !getAll, !exit"); while(state==false) { System.out.println(); System.out.print("Dwse entoli: "); if(insert.nextLine().toLowerCase().equals("!register")) { System.out.println(); start.addUser(); } else if(insert.nextLine().toLowerCase().equals("!log in")) { login = start.login(); } else if(insert.nextLine().toLowerCase().equals("!remove")) { if(login==true) { start.removeUser(); } else { System.out.println("Den exete dikaiomata gia na diagrapsete enan xristi"); } } else if(insert.nextLine().toLowerCase().equals("!get all")) { if(login==true) { start.getAll(); } else { System.out.println("Den exete deikaiomata gia aftin tin leitourgia"); } } else if(insert.nextLine().toLowerCase().equals("!exit")) { System.out.println("The program is closing"); state=true; } else { System.out.println("i entoli pou pliktrologisate den anagnorizetai!"); } } } } Θα σας ήμουν υπόχρεος αν μπορούσατε να με βοηθήσετε
alex2005 Δημοσ. 28 Φεβρουαρίου 2008 Δημοσ. 28 Φεβρουαρίου 2008 Είναι λίγο παράδοξος ο τρόπος που αποφάσισες να διαβάζεις κάτι από το πληκτρολόγιο. Ο "σωστός" τρόπος είναι: >BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String result = bf.readLine(); Αν σε ενδιαφέρει να μάθεις τον λόγο που το κάνει αυτό ο κώδικάς σου τότε προσπάθησε να ακολουθήσεις τον κώδικα βήμα βήμα. Κάθε φορά που κάνεις σε μία if ή else if....ζητάς από τον χρήστη να εισάγει ένα String. Οπότε εκτελώντας την πρώτη if ....θα ζητήσει κάτι από το πληκτρολόγιο....αν δεν είναι !register τότε θα πάει στο επόμενο else if και θα ξαναζητήσει κάτι από το πληκτρολόγιο. (όταν εκτελείται η insert.nextLine() επειδή έχεις ορίσει ως input Stream το System.in διαβάζει κάτι από το πληκτρολόγιο) Αν παρατηρήσεις πρέπει να εισάγεις δύο φορές το "log in" 3 φορές το "!remove" και πάει λέγοντας.Και αυτό γιατί υπάρχουν Χ ενδιάμεσες αιτήσεις για δεδομένα από το πληκτρολόγιο.
elis88 Δημοσ. 28 Φεβρουαρίου 2008 Μέλος Δημοσ. 28 Φεβρουαρίου 2008 Alex thnx για την απάντηση Να σε ροτίσω κάτι..? Γιατι δεν είναι σωστό να διαβάζεις από το πληκτρολόγιο με το Scanner?
dark_banishing Δημοσ. 28 Φεβρουαρίου 2008 Δημοσ. 28 Φεβρουαρίου 2008 Είναι σωστό και αυτό που έκανες εσύ. Απλά διόρθωσε το να παίρνεις input μια φορά σε κάθε loop. Ο τρόπος του alex είναι πιο συνηθισμένος γιατί είναι πιο παλιός. Η scanner class είναι πιο νέα και την έβαλαν για να διευκολύνει ορισμένες λειτουργίες. Οπότε μπορείς να το κάνεις και με τους δυο τρόπους. (άλλαξε το ποστ σε ελληνικά γιατί σβήνουν..)
alex2005 Δημοσ. 29 Φεβρουαρίου 2008 Δημοσ. 29 Φεβρουαρίου 2008 Για αυτό και έβαλα εισαγωγικά στο "σωστός" τρόπος. Δεν είναι ζήτημα ότι δεν δουλεύει με το Scanner απλά η τάξη αυτή χρησιμοποιείται για άλλους σκοπούς και όχι απλά για να ένα Stream. Και έχει να κάνει με matching κάποια regular expressions. Και βέβαια επειδή χρησιμοποιεί regex δεν είναι τόσο αποτελεσματικό όσο ένας απλός buffer.(από άποψη χρόνου) Τέλος πάντων....άσε τον έτσι τον κώδικα....εγώ απλά σου είπα ποιος είναι ο πιο συνηθισμένος τρόπος για να διαβάζεις από το πληκτρολόγιο.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.