Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Leggere un file txt con una matrice di lettere, e cercarne le parole al suo interno

    Un saluto a tutti, sto cercando di realizzare un programma in Java (utilizzo BlueJ per ora), ed essendo alle prime armi mi sarebbe utile un aiuto...
    Dovrei far leggere un file di testo, input.txt, che contiene una matrice 15x15 di lettere e, sempre all'interno del file txt, ci sono delle parole da ricercare nella matrice. Il funzionamento è analogo a quello del cruciverba!

    Il file txt è già formattato, visto che mi stampa in ordine matrice e parole, ma il problema è che quando lo vado a stampare, mi salta le prime 7 o 8 righe (ovvero le prime della matrice 15x15) e purtroppo non capisco le cause.
    Per la lettura del file ho utilizzato una parte del codice che ho trovato qui sul forum:
    codice:
    public void leggiFiles() { File name = new File("input.txt"); if (name.isFile()) { try { BufferedReader input = new BufferedReader(new FileReader(name)); StringBuffer buffer = new StringBuffer(); String text; while ((text = input.readLine()) != null) buffer.append(text + "\n"); input.close(); System.out.println(buffer.toString()); } catch (IOException ioException) { } } }
    Infine, dovrei cercare le parole date, restituendole in un file output.txt, indicando per ogni parola la riga e la colonna della matrice della lettera dove inizia, e scrivendo la "direzione" che prende, tipo nord, sud, ovest, nord-ovest, sud-est ecc...

    Spero di non chiedere una cosa troppo lunga...! ma per ora sono bloccata o quasi! Grazie a tutti!

    Il file di txt è:
    codice:
    15 * ESAFAMELBORPOZE MTOTEQEVIRCSFCE SDSTTNLHTIMSFUD CITGSUGBANDTUOI IVRUPORAMREFBCE MEAIATGFTNOCSOR MRTDDRDAENORRPO ITEIEOINEMOIPOL AIGANCTRPIPMRSO UTIORETAEMOIEID SIAAEUGAABRNZTA CAMMINAVRAIEIIM ARTSONOPRRTLOVM ACATUDESNNONSOO TALOBMABEAMVOSS # SMITH TENENTE FERMA PROBLEMA VORRA STRATEGIA AGOSTO FRUTTA NOIA PAURA GUIDI SCIMMIA CAMMINA POSITIVO SOMMA SPADE TRENO TIRO CORTO MONTAGNE CRIMINE TUOI LIBERI SCRIVE COMPAGNO BAMBOLA VAMPIRO SEDUTA BAND DOLORE DONO PREZIOSO DIVERTITI BUFFO NOSTRA CUOCO FASE IDEE

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    15
    E' ottimizzato zero, ed è anche parziale, ma questo ti può dare un'idea di cosa devi fare.
    Ho creato un file che si chiama dati.txt e l'ho letto usando uno Scanner: è una struttura che uso pochissimo, ma che in questo caso è molto più comoda di altre cose (vedi BufferedReader ecc.); lo leggo, creo la matrice, vi assegno i vari caratteri (nota che ho diviso le stringhe nei singoli caratteri per comodità); successivamente, credo un orribile for annidato: per ogni parola da cercare, scorro ogni singolo carattere della matrice verificando se trovo il primo della parola che mi interessa; se lo trovo, mi fermo e mi guardo intorno: per fare questo bisognerebbe creare un metodo, che ora non ho tempo di fare, che data una casella verifichi nelle 8 intorno se esiste il secondo carattere della stringa, e via dicendo accentrandosi poi lì se lo trova, fino a verificare se trova tutto; se trova tutto, hai una parola, e la puoi cancellare dall'ArrayList per procedere oltre con le successive. Per quanto riguarda la direzione, se trovi una parola completa, puoi verificare la posizione reciproca delle ultime due lettere e determinare quindi la direzione. Scusa se non ti faccio tutto il programma, ma non ho tempo oggi, forse domani rimedio


    codice:
    import java.util.*; import java.io.*; public class es1 { public static void main(String xD[]) throws IOException{ Scanner scan=new Scanner(new File("dati.txt")); int c=scan.nextInt(); scan.next(); char ch[][]=new char[c][c]; for (int i=0; i<c; i++){ String s=scan.next(); for (int j=0; j<c; j++){ ch[j][i]=s.charAt(j); } } scan.next(); ArrayList<String> al=new ArrayList<String>(); while (scan.hasNext()){ al.add(scan.next()); } for (int i=0; i<al.size(); i++){ for (int j=0; j<c; j++){ for (int k=0; k<c; k++){ boolean b=true; int m=0; while(b==true&&m<al.get(i).length()){ if (ch[k][j]!=al.get(i).charAt(m)){b=false;} m++; } } } } scan.close(); } }

  3. #3
    Tenik grazie mille dell'aiuto! Sto provando ad andare avanti (per ciò che da sola riesco...), in particolare sto vedendo come generare il file output.txt contenente le parole cercate, con riga/colonna della prima lettera e la sua direzione..
    Ora ti copio il file output.txt (gia lo abbiamo, ma è solo per renderci conto se alla fine ci corrisponde XD )

    Se hai aggiornamenti sul programma li seguirò volentieri

    codice:
    SMITH 2 11 OVEST TENENTE 3 11 SUD-OVEST FERMA 4 11 OVEST PROBLEMA 0 11 OVEST VORRA 14 11 NORD-OVEST STRATEGIA 2 2 SUD AGOSTO 6 7 NORD-OVEST FRUTTA 5 7 NORD-OVEST NOIA 13 11 NORD-EST PAURA 12 7 NORD-OVEST GUIDI 3 3 SUD SCIMMIA 2 0 SUD CAMMINA 11 0 EST POSITIVO 6 13 SUD SOMMA 14 14 NORD SPADE 3 4 SUD TRENO 9 6 NORD-EST TIRO 12 10 NORD CORTO 8 5 NORD MONTAGNE 8 11 NORD-OVEST CRIMINE 5 11 SUD TUOI 3 11 EST LIBERI 12 11 NORD-OVEST SCRIVE 1 11 OVEST COMPAGNO 5 11 SUD-OVEST BAMBOLA 14 7 OVEST VAMPIRO 11 7 NORD-EST SEDUTA 13 7 OVEST BAND 3 7 EST DOLORE 9 14 NORD DONO 6 6 SUD-OVEST PREZIOSO 7 12 SUD DIVERTITI 2 1 SUD BUFFO 4 12 NORD NOSTRA 12 5 OVEST CUOCO 1 13 SUD FASE 0 3 OVEST IDEE 3 14 NORD * ZMTQLSIUSAEAORACNNTEAMS

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.