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

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

Δημοσ.

θελω να κανω ενα προγραμμα το οποιο να του δινω μια συμβολοσειρα κ να ψαχνει σε ενα λεξικο κ να βρισκει ολους τους πιθανους συνδυασμους που μπορουν να γινουν με αυτα τα γραμματα...ξερω οτι σε τζαβα ειναι πιο δυσκολο αλλα πρεπει συγκεκριμενα σε αυτη τη γλωσσα ...

 

εχω ενα κομματι κωδικα το οποιο περνει χαρακτηρες απο το αρχειο...

αλλα εχει 2 προβληματα

1) κοιταει μονο τον πρωτο χαρακτηρα του αρχειου +

2)τον εμφανιζει κινεζικα...

καμια ιδεα τι να κανω..?σας παραθετω τον κωδικα..

 

public class Reader {

public static void main(String[] args) {

String strFilePath = "C:\\gwl.txt";

try {FileInputStream fin = new FileInputStream(strFilePath);

DataInputStream din = new DataInputStream(fin);

char ch = din.readChar();

if(ch == 'a){

System.out.println("Char : " + ch);

}

 

else { System.out.println("Char : " + ch);}

for (i = 0; i < r - 1; i++) {

max = i;

for (k = i + 1; k < r; k++) {

if (res[k].length() > res[max].length())

max = k;

}

temp = res;

res = res[max];

res[max] = temp;

}

din.close();

} catch (FileNotFoundException fe) {

 

System.out.println("FileNotFoundException : " + fe);

 

} catch (IOException ioe) {

System.out.println("IOException : " + ioe);

}

}

}

  • Απαντ. 31
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσ.

Δεν είναι καθόλου δύσκολο σε java. Απλά χρεάζεσαι το σωστό data structure.

Σκάναρε το λεξικό σου λέξη προς λέξη, κάνε sort τους χαρακτήρες κάθε λέξης πχ

the -> eht

Μετά (πριν προχωρήσεις στην επόμενη λέξη) βάλε σε ένα hash table το key "eht" και value μια λίστα από String μέ ένα στοιχείο "the". Αν συναντήσεις άλλη λέξη με τα ίδια γράμματα θα προστεθεί στη λίστα.

Όταν τελειώσεις μπορείς να βρεις όλους τους αναγραμματισμούς μιας λέξης πολύ γρήγορα (Ο(1)).

Δημοσ.

το προβλημα μου αρχικα ειναι αυτο που ειπα κ στο αρχικο ποστ οτι οταν παει να διαβασει απο το αρχειο

διαβαζει μονο τον πρωτο χαρακτηρα του αρχειου κ τιποτα αλλο κ οτι στην εμφανισει το βγαζει κινεζικο..

το πως θα γινει μετα θα το βρω..

αρχικα θελω να λυσω αυτο το προβλημα

Δημοσ.

Λογικό είναι να διαβάζει μόνο ένα χαρακτήρα αφού χρησιμοποιείς din.readChar(). Πρέπει να χρησιμοποιήσεις την readln() για να διαβάσεις ολόκληρη την γραμμή (και να την βάλεις σε ένα String).

Δημοσ.

πως θα κανω συγκριση ενα προς ενα τα γραμματα??

δεν εχω καταφερει ακομη να βρω τον τροπο..

 

κυβε για αυτο που ελεγες για την ταξινομηση της γραμματοσειρας πιο πανω ετσι οπως το σκεφτηκα εγω τουλαχιστον δεν θα βρει ολες τις λεξεις που μπορει να φτιαξεις με τα γραμματα που εχεις..

εκτος κ αν το εχω καταλαβει λαθος..

Δημοσ.

Αυτό που είχα προτείνει θα σου δίνει όλες τις λέξεις που σχηματίζονται ακριβώς με τα ίδια γράμματα αλλά άλλη σειρά, δηλαδή τους αναγραμματισμούς. Δεν θα σου δίνει όμως λέξεις που σχηματίζονται με υποσύνολο των γραμμάτων.

 

Θα βρεις το ακριβές πρόγραμμα εδώ, στην παράγραφο που λέγεται πολυχάρτες (multimaps).

Δημοσ.
μμ αυτο σκεφτηκα..εγω θελω κ με υποσυνολο...

 

Ε απλά θα φτιάξεις τον αλγόριθμο που βρίσκει όλα τα υποσύνολα ενός συνόλου και για κάθε ένα θα ψάξεις στον πολυχάρτη. Δεν είναι πολύ δύσκολος, αναδρομικά τουλάχιστον βγαίνει σε λίγες γραμμές.

Δημοσ.
Ε απλά θα φτιάξεις τον αλγόριθμο που βρίσκει όλα τα υποσύνολα ενός συνόλου και για κάθε ένα θα ψάξεις στον πολυχάρτη. Δεν είναι πολύ δύσκολος, αναδρομικά τουλάχιστον βγαίνει σε λίγες γραμμές.

 

το εχω κανει κ δουλευει με το μονο προβλημα

οτι εμφανιζει καποιες λεξεις που δεν θα επρεπε...

πχ οταν δινω τα γραμματα ι ι σ π τ

εμφανιζει κ καποιες λεξεις που δεν εχουν αυτα τα γραμματα..

κατα τα αλλα δουλευει...δεν ειναι σωστος απο αποψη χρονου γτ κανει αρκετες

πραξεις που μπορουν να αποφευχθουν αλλα αρχικα θελω να το κανω να δουλεψει σωστα κ μετα θα τον κανω πιο καλο..

 

αργοτερα που θα μπορεσω θα ανεβασω κ τον κωδικα

Δημοσ.

στο spoiler ειναι ο κωδικας..αυτο που μ κανει ειναι οτι εμφανιζει καποιες λεξεις που περιεχουν γραμματ που δεν εχω δωσει στην γραμματοσειρα

πιο συγκεκριμενα για γραμματοσειρα (i i p s t) οι λαθος λεξεις που εμφανιζει ειναι αυτες

Char : Ai

Char : ND

Char : Nis

Char : VA

Char : VD

Char : Vitsi

Char : WS

 

κ αυτες τις εμφανιζει αμεσως ενω τις κανονικες λεξεις που επρεπε να εμφανισει καθυστερει λιγο..

ανεβασα κ το λεξικο που εχω

>http://rapidshare.com/files/429967042/gwl.txt

 

 

import java.io.DataInputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import javax.swing.JOptionPane;

 

public class Reader {

public static void main(String[] args) {

String ch,test_letters;

char[] res = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',

'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

char test[], list[];

int i, j, flag,freqtbl[];

freqtbl = new int[26];

test_letters = JOptionPane.showInputDialog("Δωσε γραμματοσειρα ");

test = test_letters.toCharArray();

try {

FileInputStream fin = new FileInputStream("C:\\gwl.txt");

DataInputStream din = new DataInputStream(fin);

ch = din.readLine();

while (ch != null) {

for (i = 0; i < 26; i++) {

freqtbl=0;

}

flag=0;

list = ch.toCharArray();

for (i = 0; i < test.length; i++) {

for (j = 0; j < 26; j++) { //συγκρινει ενα ενα τα γραμματα που δωσαμε σαν εισοδο με το αλφαβητο

if (res[j] == test) { //κ οταν βρει ιδιο γραμμα αυξανει κατα ενα την τιμη του πινακα

freqtbl[j]++;

}

}

}

for (i = 0; i < list.length; i++) {

for (j = 0; j < 26; j++) {

if (res[j] == list) { //συγκρινει ενα ενα τα γραμματα της λεξης απο το αρχειο με το αλφαβητο

freqtbl[j]--; //κ οταν βρει ιδιο γραμμα μειωνει κατα ενα την τιμη του πινακα

}

}

}

j = 0;

while (j < 26 && flag == 0) {

if (freqtbl[j] < 0) {

flag = 1; //αν βρει οτι υπαρχει αρνητικη τιμη σημαινει οτι η λεξει του αρχειου εχει γραμμα που

} //δεν εχει η εισοδος που δωσαμε

j++;

}

if (flag == 0 && list.length > 1) { //αν δεν εχει αρνητικη τιμη ο πινακας κ να εμφανισει λεξεις που εχουν παραπανω απο ενα γραμμα

System.out.println("Char : " + ch);

}

ch = din.readLine();

}

} catch (FileNotFoundException fe) {

 

System.out.println("FileNotFoundException : " + fe);

 

} catch (IOException ioe) {

System.out.println("IOException : " + ioe);

}

}

}

 

 

Δημοσ. (επεξεργασμένο)

αλλαγές

 

>
if (res[j] == test[i] || (res[j]+'A'-'a')==test[i]) { //κ οταν βρει ιδιο γραμμα αυξανει κατα ενα την τιμη του πινακα
freqtbl[j]++;
}
}
}
for (i = 0; i < list.length; i++) {
for (j = 0; j < 26; j++) {
if (res[j] == list[i] || (res[j]+'A'-'a')==list[i]) { //συγκρινει ενα ενα τα γραμματα της λεξης απο το αρχειο με το αλφαβητο
freqtbl[j]--; //κ οταν βρει ιδιο γραμμα μειωνει κατα ενα την τιμη του πινακα
}

Επεξ/σία από virxen75
Δημοσ.
αν δώσεις γραμματοσειρά a b c

τότε η λέξη abca είναι έγκυρη?

 

οχι...

πρεπει να φτιαχνεται με τα γραμματα που εχεις δωσει..

σκεψου να παιζεις scramble..κ προσπαθεις να φτιαξεις μια λεξη με τα γραμματα που εχεις στο χερι σ!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

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