Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Matrice

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    3

    Matrice

    Devo caricare una matrice da file.
    Però i dati per riempire la matrice sono dopo una certo carattere.
    Per riempirla ho fatto un ciclo ma come faccio a dirgli di prendermi solo i caratteri dopo una certa riga?

  2. #2
    Dovresti usare o un ciclo while o un controllo if.
    Posta il codice così vediamo che fare

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    3

    ..

    import java.io.*;

    public class Test {

    static int N;

    private static BufferedReader b;

    public static void main(String [] args) throws IOException
    {

    FileReader file = new FileReader("input.txt");
    b = new BufferedReader(file);
    String s;
    s=b.readLine();
    N=Integer.parseInt(s);
    b.close();
    file.close();
    }

    public int[][] GeneraMatrice(int[][] Matrice)
    {
    Matrice = new int[N][N];
    return Matrice;

    }

    }






    Per adesso sono qua.
    Ovvero sul mio file caricato nella prima riga trovo le dimensioni della mia matrice, nella seconda un asterisco e dalla terza in poi tutti i caratteri con cui devo riempire la matrice.
    Io avevo pensato di ultizzare un metodo del Buffered reader che mi leggeva solo dalla 3 riga in poi così che riuscivo ad eliminare le prime due... ma forse è meglio mettere un ciclo while e all'interno aggiungere un ciclo if.
    Perche dopo la mia matrice nel file ci sono altre cose che devo leggere dopo aver riempito la matrice.
    quindi faccio un ciclo while e gli dico che se arriva all'asterisco da lì in poi deve riempirmi la matrice e se incontra il cancelletto(ovvero il caraterre alla fine della matrice) deve leggermi quello che sta sotto. Puoi aiutarmi?

  4. #4
    Puoi mettere anche il contenuto del file?


    codice:
    FileReader file = new FileReader("input.txt");
            b = new BufferedReader(file);
            String in=null;
            int i=0;
            while((in=b.readLine())!=null) //calcolo il numero di righe nel file
            {
    			i++;
    	}
    		String[] a = new String[i];
    		for (int k=0;k<a.length;k++)
    		{
    			a[k]=b.readLine();
    		}
    Inizializzi un array unidimensionale con il contenuto del file.
    Poi non ho ben capito come è strutturato il file.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    3

    ..

    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







    Questo è il file.
    Ti spiego brevemente quello che devo fare.
    Il programma che devo scrivere è un risolutore di parole incrociate.
    15 è la dimensione della matrice che è quadrata.
    e per farla ho fatto così:

    FileReader file = new FileReader("input.txt");
    b = new BufferedReader(file);
    String s;
    s=b.readLine();
    N=Integer.parseInt(s);
    b.close();
    file.close();


    Ovvee con file reader ho preso il file gli ho fatto leggere solo la prima riga (s=b.readLine() poi l'ho convertita in intero xk me la legge stringa e poi ci ho costruito la matrice:

    Matrice = new int[N][N];
    return Matrice;

    Per adesso funzione l'unica cosaè che nn so riempire la matrice.

    Comunque andando avanti il programma crea la matrice come detto sopra la riempie con tutto quello che sta dopo l'asterisco e prima del cancelletto e poi deve prendere le parole sottostanti cercarle all'interno della matrice e cancellarle da essa.
    Alla fine deve stamparmi un file di testo (output.txt) che è il seguente(non prenderlo come riferimento perchè è sbagliato):

    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

    Ora ti spiego che significa:
    es. SMITH 2 11 OVEST

    SMITH parola da cercare
    2 11 rispettivamente riga e colonna dove inizia la parole quindi della prima lettera
    OVEST il verso da dove devo leggere la parola dopo la prima lettera

    alla fine ricercate tutte le parole deve andare a capo mettere un asterisco andare ancora a capo e scrivere in ordine da sinistra verso destra per tutte le righe tutte le lettere rimenenti.

  6. #6
    Quindi se il file rimane sempre quello intendo come struttura puoi procedere come hai iniziato.

    Per prima cosa leggi la prima riga e dai le dimensioni alla matrice.
    Poi invece che array come ti ho detto puoi usare un ArrayList, che ad ogni elemento associa un Array di stringhe

    Per cui avrai un ArrayList<String> composto da 15 elementi String[]. Ora per ognuno di essi fai un ciclo for che va da 1 a 15 ( quindi [1],[2],[3] e così via) e carichi le varie righe della matrice.

    Ti servono due cicli for annidati per questo scopo. Il primo che scorre tra i 15 elementi dell'arraylist, e il secondo all'interno del primo che prende ogni carattere di quelle String[15] e lo mette nella matrice.

    Per il secondo punto, quello della ricerca delle parole non saprei come procedere.
    In ogni caso dovresti ricorrere di nuovo ai cicli for, con una condizione if che controlli che l'index di un carattere rispetto ad un altro sia adiacente (orizzontalmente verticalmente o diagonalmente).

    Quindi ti converrebbe fare un altro arraylist con le parole dopo il cancelletto (dalla riga 17 in poi) e prendendo per esempio "smith". Con un ciclo for trovare ogni carattere s nella matrice con indice ad esempio [n][m], vedere se quello [n][m+1] [n+1][m] [n+1][m+1] ecc corrisponde a m, e questo per ogni carattere della parola. E' sicuramente più corto a scrivere che a dirlo. Perchè faresti ricorso ad un for(int i=0;i<arralylist.get(1).lenght();i++) ad esempio per la prima parola e così via.Al posto di 1 ci andrà un'altra variabile contatore assegnata ad un ciclo for che contiene quello scritto. E così via.

    Spero di essere stato di aiuto.

    EDIT:
    Per il file di output, i versi delle parole li determini di già quando fai il controllo con gli indici, quindi usi una variabile boolean con i versi o come meglio credi. Poi per gli indici basta usare i contatori del ciclo for, e per la parola il contatore assegnato all'arraylist con out.write(arraylist.get(i).toString()) mi sembra.

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.