Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378

    [java]- passare valori variabili da file

    salve ragazzi,
    ho bisogno di creare un metodo per importare dentro una matrice bidimensionale una serie di caratteri sotto questa forma e scritti su un file.txt:

    file.txt
    codice:
    5 4 2
    @ @ @ @ @
    # # # # #
    @ @ @ @ @
    # # # # #
    io utilizzo questo codice per testare l'oggetto e capire come funziona,mi sa però che non c ho capito un gran che perchè ecco cosa mi stampa:

    codice:
    @ @ @ @ @
    # # # # #
    @ @ @ @ @
    # # # # #
    53  32  52
    invece io vorrei che mi stampasse:

    codice:
    @ @ @ @ @
    # # # # #
    @ @ @ @ @
    # # # # #
    5  4  2
    questo è il codice che stò usando per capire come poter fare quello che mi serve:
    codice:
    import java.io.*;
    public class Main {
    	
        public static void main(String [] args) throws IOException { 
            
            FileReader filein = new FileReader("file.txt"); 
            int next;
            char nextc;
            
            int larghezza = 0;
            int altezza = 0;
            int numero = 0;
            int cont = 0;
            next = filein.read();
    
            while(next != -1){
            cont++;
            if(next != -1){
            if(cont == 1){
            larghezza = (int) next;}
            else if(cont == 2){
            altezza = (int) next;}
            else if(cont == 3){
            numero =  (int) next;}
            else{
            nextc = (char) next;
            System.out.print(nextc);
            }
            }
            next = filein.read();
            }
            System.out.println();
            System.out.println(larghezza + "  " + altezza + "  " + numero);
            filein.close();
            }
    }

    dove sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Descrivia parole quel che devi fare... così come l'hai messa, sembra quasi che la prima riga del file debba diventare l'ultima di.... ?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    Originariamente inviato da Andrea1979
    Descrivia parole quel che devi fare... così come l'hai messa, sembra quasi che la prima riga del file debba diventare l'ultima di.... ?
    Ciao Andrea
    in pratica io devo caricare quei char(@,#) rappresentati su quel file di testo in una matrice bidimensionale campo[l][h],l larghezza,h altezza, proprio come sono stati scritti sul file.

    nella prima riga volevo specificare almeno i valori di larghezza e di altezza che nell oggetto Griglia gli passo per inizializzare il costruttore dell'array campo[larghezza][aletezza] per poi rimepirlo in seguito.

    il terzo parametro della prima riga stò pensando ora che non serve inserirlo dato che quel valore mi serviva per generare il numero di pedine diverse che dovevo andare a pescare dall'array pedine[] inserendole in modo casuale.

    quindi,in pratica ciò che devo fare io è :
    1)definire l'oggetto Griglia passandogli due valori che inserirò nella prima riga inserendoli in un secondo costruttore,cosi da non dover inserire il numero di caratteri diversi esistenti dato che non serve in questo caso
    2)inserire carattere per carattere nella matrice cosi che se stampo la matrice veda la griglia riempita come quella rappresentata su file.

    come posso fare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora, per comodità, puoi benissimo usare un BufferedReader per leggere il file riga a riga. Dal tipo

    codice:
    /**
     *
     * @author Andrea
     */
    import java.io.*;
    import java.util.*;
    
    public class MatrixFromFile {
        
        String[][] matrix;
        
        /** Creates a new instance of MatrixFromFile */
        public MatrixFromFile(String file) {
            try {
                BufferedReader br = new BufferedReader(new FileReader(file));
                String line = br.readLine();
                
                //StringTokenizer è sconsigliato, però visto
                //la banalità dell'operazione lo usiamo lo stesso
                
                StringTokenizer st = new StringTokenizer(line);            
                int width = Integer.parseInt(st.nextToken());
                int height = Integer.parseInt(st.nextToken());
                
                //creo la matrice
                matrix = new String[height][width];
                
                //carico per righe i dati nella matrice;
                int rowIndex = 0;
                while ((line = br.readLine()) != null) {
                    int columnIndex = 0;
                    st = new StringTokenizer(line);
                    while (st.hasMoreElements()) {
                        matrix[rowIndex][columnIndex] = st.nextToken();
                        columnIndex++;
                    }
                    rowIndex++;
                    
                }
                br.close();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        public String toString() {
            String temp = "";
            for (int i = 0; i < matrix.length; i++) {
                for (int j = 0; j < matrix[0].length; j++) {
                    temp += matrix[i][j]+"\t";
                }
                temp += "\n";
            }
            return temp;
        }
        
        public static void main(String[] args) {
            MatrixFromFile mff = new MatrixFromFile("C:/Documents and Settings/Andrea/Desktop/file.txt");
            System.out.println(mff);
        }
        
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    Sei stato davvero gentile,
    grazie mille Andrea

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Prego, chiaramente, sistema a modo tuo. Oh, un'accorgimento minimo: StringTokenizer divide ad ogni "blank" per cui dovresti evitare di generare file con righe con spazi iniziali o finali e spazi multipli tra un elemento e l'altro. Se non si potesse evitare una tale generazione "anomala" non ti resta che votarti al santo regex e fare delle opportune sostituzioni (a quel punto potresti semplicemente catturare i caratteri utili e attorno a quelli fare lo split, un po' il contrario di quello che succede con la mia implementazione con StringTokenizer)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    ah,visto che sei collegato,ho un piccolo problemuccio
    in pratica stò cercando di fare un cast sui valori passati all'array matrix che ho definito nell'oggetto come char,quindi ho provato a fare un matrix[rowIndex][columnIndex] = (char) st.nextToken();
    ma aimè come immaginavo è impossibile.
    qualche dritta su come poter fare questo cast?

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    dovresti intanto anche modificare la dichiarazione della matrice (in modo che sia di char e non di String), e poi dove effettivamente vado a compilare la matrice, ci va un

    codice:
    matrix[rowIndex][columnIndex] = st.nextToken().charAt(0);
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    e se volessi fare senza i 2 parametri iniziali per agevolare l'utente,e le pedine tutte attaccate senza spazi,come potrei fare?

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Con Vector di java.util
    Carichi le righe, riga a riga nel Vector (che altro non è che una specie di array che cresce all'occorrenza, quindi non serve specificare le dimensioni iniziali). Alla fine conti quanti elementi ci sono nel vector, calcoli la lunghezza della prima riga (lo potevi fare anche durante la lettura del file) e applichi charAt in un ciclo for tra 0 e lunghezza_riga - 1.
    Amen
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.