chmo Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 για χαρά παιδιά… κατ αρχήν είμαι ψάρακας στον προγραμματισμό… εχω ένα arraylist στο οποίο αποθηκεύονται label και definition (είναι ένα λεξικό) τα label και befinition δεν τρέχουν μέσα από κάποια βάση δεδομένων αλλα μέσα από το ίδιο το πρόγραμμα δλδ private void addTerms () { addTerm("abstract class","A class that contains one or more..."); addTerm("abstract method","A method that has no implementation"); } Αυτό το πρόγραμμα έχει διάδραση μέσα από το terminal του compiler… ο χρήστης γράφει μια λέξι και αμα υπάρχει ο όρος του την τυπώνει… Εγω αυτό που θέλω είναι όταν ο χρήστης γράφει ένα γράμμα πχ “Α” να του τυπώνει όλες τις λέξεις από αυτό το γράμμα… Προσπάθησα να το κάνω με substring(0,1) αλλα δεν μου βγαίνει για κάποιο λόγο… το έψαξα και με ASCII αλλα δεν βγάζω άκρι… Υπάρχει κανένας τρόπος να το κάνω? Ευχαριστώ!!
chmo Δημοσ. 6 Νοεμβρίου 2010 Μέλος Δημοσ. 6 Νοεμβρίου 2010 να σου στείλω κόδικα... που ομως? ---------- Προσθήκη στις 20:00 ---------- Προηγούμενο μήνυμα στις 19:47 ---------- στείλε κώδικα να στο φτιάξω μπωρείς να το κατεβάσεις απο εδώ (σε BlueJ το δουλεύω) http://www.ionio.gr/~av200420/glossary/
virxen75 Δημοσ. 7 Νοεμβρίου 2010 Δημοσ. 7 Νοεμβρίου 2010 παρατηρήσεις 1) ......... if (word.equals(i.next())) found = true; ........... if (label.equals(i.next().getLabel())) found = true; ........................ επειδή παίζεις με λέξεις και όχι αριθμούς πρέπει να λάβεις υπόψιν και το case των γραμμάτων π.χ. κοσμος , Κοσμος ενώ είναι τα ίδια ουσιαστικά με την πιο πάνω εντολή παίρνεις ότι είναι άνισα! χρησιμοποίησε την equalsIgnoreCase δες εδώ http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#equalsIgnoreCase%28java.lang.String%29 2) πρεπει να λάβεις υπόψιν τα κενά μεταξύ λέξεων να είναι απαραιτήτως μόνο ένα π.χ. after one , after one ενώ οπτικά είναι το ίδιο στον έλεγχο θα σου τα δώσει διαφορετικά 3) για αυτό που ζητάς επειδή θα είναι πολλές οι απαντήσεις θα χρειαστείς ArrayList > public void interact() { System.out.print("Enter term: "); String term = EasyIn.getString(); ArrayList<String> temp=getTermDefinition1(term); for (int i=0;i<temp.size();i++){ System.out.println(temp.get(i)); } ....... > public ArrayList<String> getTermDefinition1(String labelFrom) { ArrayList<String> definition = new ArrayList<String>(); Iterator<Term> i = termsList.iterator(); while (i.hasNext()) { Term nextTerm = i.next(); if (nextTerm.getLabel().indexOf(labelFrom)==0) definition.add(nextTerm.getDefinition()); } return definition; } if (nextTerm.getLabel().indexOf(labelFrom)==0) αν αρχίζει με το δοθέν string if (nextTerm.getLabel().indexOf(labelFrom)>=0) αν περιέχει οπουδήποτε το string αρχή,μέση ,τέλος.
chmo Δημοσ. 7 Νοεμβρίου 2010 Μέλος Δημοσ. 7 Νοεμβρίου 2010 παρατηρήσεις 1) επειδή παίζεις με λέξεις και όχι αριθμούς πρέπει να λάβεις υπόψιν και το case των γραμμάτων π.χ. κοσμος , Κοσμος ενώ είναι τα ίδια ουσιαστικά με την πιο πάνω εντολή παίρνεις ότι είναι άνισα! χρησιμοποίησε την equalsIgnoreCase δες εδώ http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#equalsIgnoreCase%28java.lang.String%29 2) πρεπει να λάβεις υπόψιν τα κενά μεταξύ λέξεων να είναι απαραιτήτως μόνο ένα π.χ. after one , after one ενώ οπτικά είναι το ίδιο στον έλεγχο θα σου τα δώσει διαφορετικά 3) για αυτό που ζητάς επειδή θα είναι πολλές οι απαντήσεις θα χρειαστείς ArrayList > public void interact() { System.out.print("Enter term: "); String term = EasyIn.getString(); ArrayList<String> temp=getTermDefinition1(term); for (int i=0;i<temp.size();i++){ System.out.println(temp.get(i)); } ....... > public ArrayList<String> getTermDefinition1(String labelFrom) { ArrayList<String> definition = new ArrayList<String>(); Iterator<Term> i = termsList.iterator(); while (i.hasNext()) { Term nextTerm = i.next(); if (nextTerm.getLabel().indexOf(labelFrom)==0) definition.add(nextTerm.getDefinition()); } return definition; } if (nextTerm.getLabel().indexOf(labelFrom)==0) αν αρχίζει με το δοθέν string if (nextTerm.getLabel().indexOf(labelFrom)>=0) αν περιέχει οπουδήποτε το string αρχή,μέση ,τέλος. Πρώτα από όλα ευχαριστώ πολύ για τον χρόνο που αφιέρωσες για εμένα… Ένα δεύτερο πράγμα που θέλω να σε ρωτήσω (δεν είναι απαραίτητο να μου λύσεις πάλι το πρόβλημα μου)… Είναι, όταν η λέξη δεν υπάρχει στο λεξικό και σου δίνει: System.out.println(getSimilarTerms(term)); Τα οποία δεν γνωρίζουμε πάντα ποιος είναι ο αριθμός τους (ξέρουμε ότι ο μέγιστος είναι 5) πως μπορώ να του πω ότι από αυτά τα 5 πχ δώσε μου το definition του 3 ή τέλος πάντων ενός αριθμού που θα πληκτρολογώ? ---------- Προσθήκη στις 02:22 ---------- Προηγούμενο μήνυμα στις 02:19 ---------- Πρώτα από όλα ευχαριστώ πολύ για τον χρόνο που αφιέρωσες για εμένα… Ένα δεύτερο πράγμα που θέλω να σε ρωτήσω (δεν είναι απαραίτητο να μου λύσεις πάλι το πρόβλημα μου)… Είναι, όταν η λέξη δεν υπάρχει στο λεξικό και σου δίνει: > System.out.println(getSimilarTerms(term)); Τα οποία δεν γνωρίζουμε πάντα ποιος είναι ο αριθμός τους (ξέρουμε ότι ο μέγιστος είναι 5) πως μπορώ να του πω ότι από αυτά τα 5 πχ δώσε μου το definition του 3 ή τέλος πάντων ενός αριθμού που θα πληκτρολογώ?
virxen75 Δημοσ. 7 Νοεμβρίου 2010 Δημοσ. 7 Νοεμβρίου 2010 μπορείς να του πεις να εμφανίσει τα αποτελέσματα σε αριθμημένη λίστα και να σε ρωτήσει ποιο θες να εμφανίσει 1) ααα 2) βββ 3) γγγ ποια επιλογή να εμφανίσω(1-3)? μία υλοποίηση θα μπορούσε να είναι > temp=getSimilarTerms("arrays"); if (temp.size()>0){ for (int i=0;i<temp.size();i++){ System.out.println(""+(i+1)+")"+temp.get(i)); } int choice=-1; while (choice<1 || choice>temp.size()){ System.out.print("Enter choice(1-"+temp.size()+"): "); choice = EasyIn.getInt(); } choice--; System.out.println(getTermDefinition(temp.get(choice))); }
chmo Δημοσ. 7 Νοεμβρίου 2010 Μέλος Δημοσ. 7 Νοεμβρίου 2010 Ευχαριστώ και πάλι…. Δίο τελευταία πράγματα να σε ρωτήσω και υπόσχομαι πως δεν θα σε ξαναενοχλήσω!! Στον παρακάτω κώδικα ο οποίος είναι μέσα στη μέθοδο addTerms() διαβάζει τα label και τα definition από 2 txt ένα με τα label και ένα με τα definition. Αυτή τη στιγμή δε λειτουργεί σωστά (μου έχει σπάσει τα νεύρα). Το πρώτο που θέλω είναι άμα γίνετε να τα διαβάζει από ένα txt αρχείο και όχι από 2 διαφορετικά… (ουσιαστικά θέλω να έχω διαφορετικά txt με διαφορετικούς όρους (πχ λεξικό για αυτοκίνητα, μόδας, πληροφορικής) αλλά αυτό το κάνω μόνος μου, μι δώσεις σημασία) Ένα δεύτερο είναι άμα θέλω να κάνω add ένα label και ένα definition να τα σώζει στο txt αρχείο… >private void addTerms () { char[] label = null; String[] matrix1 = new String[30]; char[] definition = null; String[] matrix2 = new String[30]; try { FileInputStream fs1 = new FileInputStream("label.txt"); DataInputStream in1 = new DataInputStream(fs1); BufferedReader br1 = new BufferedReader(new InputStreamReader(in1)); String strL; int t = 0; int k = 0; while ((strL = br1.readLine()) != null) { label = strL.toCharArray(); for (int j = 0; j < label.length; j++) { t++; if (label[j] == '"') { //String w; //w = String.copyValueOf(label); //matrix1[k] = w.substring(1); matrix1[k] = String.copyValueOf(label); k++; } } } //System.out.println(matrix1[1]); in1.close(); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } try { FileInputStream fs2 = new FileInputStream("definition.txt"); DataInputStream in2 = new DataInputStream(fs2); BufferedReader br2 = new BufferedReader(new InputStreamReader(in2)); String strD; int t = 0; int k = 0; while ((strD = br2.readLine()) != null) { definition = strD.toCharArray(); for (int j = 0; j < definition.length; j++) { t++; if (definition[j] == '"') { //String w; //w = String.copyValueOf(definition); //matrix2[k] = w.substring(1); matrix2[k] = String.copyValueOf(definition); k++; } } } //System.out.println(matrix2[1]); in2.close(); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } for(int i = 0; i < matrix1.length; i++) { addTerm(matrix1[1],matrix2[1]); } }
virxen75 Δημοσ. 7 Νοεμβρίου 2010 Δημοσ. 7 Νοεμβρίου 2010 1) τα terms και definitions θα εισάγονται πάντα μόνο μέσα από το πρόγραμμα? 2) υπάρχει πρόβλημα αν το αρχείο με τα terms,definitions δεν είναι txt?
chmo Δημοσ. 8 Νοεμβρίου 2010 Μέλος Δημοσ. 8 Νοεμβρίου 2010 τα terms και definitions θα εισάγονται πάντα μόνο μέσα από το πρόγραμμα? θα εισάγωντε μέσα απο το terminal... το θέμα ειναι να υπάρχει διάδραση μόνο μέσα απο το terminal...
virxen75 Δημοσ. 8 Νοεμβρίου 2010 Δημοσ. 8 Νοεμβρίου 2010 το πιο απλό είναι με serialization θέλει μία αλλαγή εδώ > ..... public class Term implements java.io.Serializable ...... έπειτα θέλεις ένα κεντρικό μενού με επιλογές π.χ. 1)φόρτωσε λεξικό 2)αποθήκευση λεξικού 3)εισαγωγή όρου 4)διαγραφή όρου 5)αλλαγή όρου 6)αναζήτηση όρου 7)έξοδος
chmo Δημοσ. 8 Νοεμβρίου 2010 Μέλος Δημοσ. 8 Νοεμβρίου 2010 δεν σε πιάνω!!!! οπως είπα είμαι αρκετά νέος σε προγραμματισμο...
virxen75 Δημοσ. 8 Νοεμβρίου 2010 Δημοσ. 8 Νοεμβρίου 2010 δεν σε πιάνω!!!! οπως είπα είμαι αρκετά νέος σε προγραμματισμο... την διορθωση στο Term.java την έκανες? public class Term implements java.io.Serializable
chmo Δημοσ. 8 Νοεμβρίου 2010 Μέλος Δημοσ. 8 Νοεμβρίου 2010 ναι το έκανα... δεν σε έπιανα γιατι δουλεύω σε BlueJ και δε μου το εμφάνιζε... τώρα το έτρεξα στο netbeans... στη συνέχεια? ---------- Προσθήκη στις 00:36 ---------- Προηγούμενο μήνυμα στις 00:34 ---------- άμα δεν το τρέχει απο txt να το τρέχει απο κάπια βάση δεδομένων? mysql? απο txt μου το ζητάνε...
virxen75 Δημοσ. 8 Νοεμβρίου 2010 Δημοσ. 8 Νοεμβρίου 2010 > private void writeTerms(String filename){ FileOutputStream fOut=null; ObjectOutputStream oOut=null; try{ fOut= new FileOutputStream(filename); oOut = new ObjectOutputStream(fOut); oOut.writeObject(termsList); System.out.println("Terms saved!!!"); }catch(IOException e){ System.out.println("error="+e); }finally{ try { oOut.flush(); oOut.close(); fOut.close(); } catch (IOException e1) { System.out.println("error="+e1); } } } αυτό για αποθήκευση σε αρχείο και αυτό για διάβασμα από αρχείο > private void loadTerms(String filename){ FileInputStream fIn=null; ObjectInputStream oIn=null; try{ fIn= new FileInputStream(filename); oIn = new ObjectInputStream(fIn); termsList = (ArrayList<Term>) oIn.readObject(); System.out.println("Terms loaded!!!"); }catch(IOException e){ System.out.println("error="+e); }catch(ClassNotFoundException e){ System.out.println("error="+e); }finally{ try { oIn.close(); fIn.close(); } catch (IOException e1) { System.out.println("error="+e1); } } } παράδειγμα χρήσης 1) > ........ public void interact() { writeTerms("terms1.txt"); ........... αποθηκεύει στο αρχείο terms1.txt τα περιεχόμενα της λίστας termsList 2) για να καταλάβεις τι έσωσε στο αρχείο κάνε 2 αλλαγές στον κώδικα > public Glossary() { termsList = new ArrayList<Term>(); lexicon = new Lexicon(); [color="Blue"] //addTerms();<---------εδώ[/color] interact(); } ..............και.......... ........ public void interact() { [color="Blue"] //writeTerms("terms1.txt");<----εδώ loadTerms("terms1.txt");<====εδώ[/color] βάζει στην λίστα termsList τα περιεχόμενα του αρχείου
chmo Δημοσ. 8 Νοεμβρίου 2010 Μέλος Δημοσ. 8 Νοεμβρίου 2010 τι method addTerms τι να την κάνω? ουσιαστικά μέσα εκει προσπαθούσα να κάνω τη δουλειά μου... αμα τη βγάλω χτυπάει σφάλμα ---------- Προσθήκη στις 01:02 ---------- Προηγούμενο μήνυμα στις 01:00 ---------- στο αρχείο τχτ τα label και δεφινιτιον μπένουν όπως πρίν "lable" , "definition"
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.