Προς το περιεχόμενο

array και διάδραση μεσω terminal


chmo

Προτεινόμενες αναρτήσεις

Δημοσ.

για χαρά παιδιά… κατ αρχήν είμαι ψάρακας στον προγραμματισμό…

εχω ένα 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 αλλα δεν βγάζω άκρι…

Υπάρχει κανένας τρόπος να το κάνω?

 

Ευχαριστώ!!

Δημοσ.

να σου στείλω κόδικα... που ομως?

 

---------- Προσθήκη στις 20:00 ---------- Προηγούμενο μήνυμα στις 19:47 ----------

 

στείλε κώδικα να στο φτιάξω

 

μπωρείς να το κατεβάσεις απο εδώ (σε BlueJ το δουλεύω)

 

http://www.ionio.gr/~av200420/glossary/

Δημοσ.

παρατηρήσεις

 

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 αρχή,μέση ,τέλος.

Δημοσ.
παρατηρήσεις

 

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 ή τέλος πάντων ενός αριθμού που θα πληκτρολογώ?

Δημοσ.

μπορείς να του πεις να εμφανίσει τα αποτελέσματα σε αριθμημένη λίστα

και να σε ρωτήσει ποιο θες να εμφανίσει

 

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)));
       }

Δημοσ.

Ευχαριστώ και πάλι….

Δίο τελευταία πράγματα να σε ρωτήσω και υπόσχομαι πως δεν θα σε ξαναενοχλήσω!!

Στον παρακάτω κώδικα ο οποίος είναι μέσα στη μέθοδο 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]);
       }
}

Δημοσ.

1) τα terms και definitions θα εισάγονται πάντα μόνο μέσα από το πρόγραμμα?

2) υπάρχει πρόβλημα αν το αρχείο με τα terms,definitions δεν είναι txt?

Δημοσ.
τα terms και definitions θα εισάγονται πάντα μόνο μέσα από το πρόγραμμα?

 

θα εισάγωντε μέσα απο το terminal... το θέμα ειναι να υπάρχει διάδραση μόνο μέσα απο το terminal...

Δημοσ.

το πιο απλό είναι με serialization

 

θέλει μία αλλαγή εδώ

 

>
.....
public class Term implements java.io.Serializable
......

 

έπειτα θέλεις ένα κεντρικό μενού με επιλογές π.χ.

 

1)φόρτωσε λεξικό

2)αποθήκευση λεξικού

3)εισαγωγή όρου

4)διαγραφή όρου

5)αλλαγή όρου

6)αναζήτηση όρου

7)έξοδος

Δημοσ.
δεν σε πιάνω!!!! οπως είπα είμαι αρκετά νέος σε προγραμματισμο...

 

 

την διορθωση στο Term.java την έκανες?

 

public class Term implements java.io.Serializable

Δημοσ.

ναι το έκανα... δεν σε έπιανα γιατι δουλεύω σε BlueJ και δε μου το εμφάνιζε... τώρα το έτρεξα στο netbeans...

 

στη συνέχεια?

 

---------- Προσθήκη στις 00:36 ---------- Προηγούμενο μήνυμα στις 00:34 ----------

 

άμα δεν το τρέχει απο txt να το τρέχει απο κάπια βάση δεδομένων? mysql? απο txt μου το ζητάνε...

Δημοσ.

>
    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 τα περιεχόμενα του αρχείου

Δημοσ.

τι method addTerms τι να την κάνω? ουσιαστικά μέσα εκει προσπαθούσα να κάνω τη δουλειά μου... αμα τη βγάλω χτυπάει σφάλμα

 

---------- Προσθήκη στις 01:02 ---------- Προηγούμενο μήνυμα στις 01:00 ----------

 

στο αρχείο τχτ τα label και δεφινιτιον μπένουν όπως πρίν "lable" , "definition"

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...