Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154

    [Java] Help urgente: stampa su file

    Ciao, avrei necessità di modificare questo programmino in Java per fargli stampare l'array di reali con il risultato finale su file nella forma "0.1 0.4 0.6321 0.2 0.945 ... "
    Il fatto però è che di Java non so niente

    In pratica, gli passo l'input da file: se questo file di input per es. si chiama pippo.txt, il programma mi deve creare (o sovrascrivere se già esiste) un nuovo file di nome pippo_rel_ist.txt e stampare appunto qui i valori nella forma detta prima ("0.1 0.4 0.6321 0.2 0.945 ... ").
    Vi riporto il programma nelle parti principali (come prende cioè il file per vederne il nome) e come si chiama il vettore finale da stampare (non capisco se lo crea nell'ultima o nella penultima funzione che riporto giù).
    codice:
    public class Main {
    
        ...
    
        public Main(String file){
            this.nomeFile = file;
            loadInput();
        }
    
        public void loadInput(){
    
            LoadInput input = new LoadInput(nomeFile);
    
            inputAplotipi = input.load();
        }
    
        ...
    
        public float getNewValue(int colonna){
            float []prob = probAplotipi(colonna);
            float [][] ent = getStrutturaEntropia(colonna);
    
            float ris = 0;
            for(int riga=0; riga<inputAplotipi.length; riga++){
    
                char carattere = inputAplotipi[riga][colonna];
                float jDatoI = 0;
                for(int col = 0; col<inputAplotipi[0].length; col++){
                    if(col != colonna){
    
                        char []t = new char[2];
    
                        t[0] = carattere;
                        t[1] = inputAplotipi[riga][col];
    
                        jDatoI += ent[col][getIndiceCondizionata(String.valueOf(t))] *
    Math.log10(ent[col][getIndiceCondizionata(String.valueOf(t))])/ Math.log10(2);
                    }
                }
                ris += prob[getIndice(carattere)] * jDatoI;
            }
    
            return -ris;
        }
    
        public float [] calcolaColonne(){
            float []istogramma = new float[inputAplotipi[0].length];
            for(int colonna =0; colonna<inputAplotipi[0].length; colonna++){
                istogramma[colonna] = getNewValue(colonna);
            }
            return istogramma;
        }
    
    }
    Inutile dire che ringrazio chiunque mi aiuti

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Per scrivere sul file l'array di reali è sufficiente questo codice (mettilo tu dove sei interessato ad eseguire la scrittura):
    codice:
    PrintStream ps = null;
    try {
       ps = new PrintStream( new FileOutputStream( "nome_del_file" ) );
       for (int i=0; i<prob.length-1; i++) {
          ps.print(prov[i] + " ");   // Separo i vari valori con uno spazio
       }
       ps.print(prov[prov.length-1]);
       ps.close();
    } catch (Exception e) { e.printStackTrace(); }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Grazie per la disponibilità.
    Mi dà però due errori in compilazione:
    codice:
    Main.java:189: illegal start of type 
    	try 
    	^
    Main.java:199: <identifier> expected
            }
            ^
    2 error
    Non ne riesco a venire a capo. Ti riporto le righe "incriminate":
    codice:
      .....
    public float [] calcolaColonne(){
            float []istogramma = new float[inputAplotipi[0].length];
            for(int colonna =0; colonna<inputAplotipi[0].length; colonna++){
                istogramma[colonna] = getNewValue(colonna);
            }
            return istogramma;
        }
        
        PrintStream ps = null;
        try                         // RIGA 189
        {
            ps = new PrintStream( new FileOutputStream( "nome_del_file" ) );
            for (int i=0; i<prob.length-1; i++) 
            {
                ps.print(prov[i] + " ");   // Separo i vari valori con uno spazio
            }
            ps.print(prov[prov.length-1]);
            ps.close();
        }
    }                                 // RIGA 199
    // FINE PROGRAMMA

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il blocco di codice che ti ho postato va inserito all'interno di un metodo... (guardando il codice da te riportato nel primo post, dovrebbe andare nel metodo getNewValue() ) mentre, da quel che vedo, tu l'hai inserito al di fuori dei metodi.
    Poi non hai messo la riga con il catch.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Ah ecco cos'era. Proverò appena posso e ti terrò informato
    Grazie 1000 per la disponibilità e per l'aiuto

  6. #6
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Mhm ancora non va. Ho inserito la tua funzione in getNewValue prima di "return -ris;" però ottengo questo errore compilandola da Win con con "javac Main.java":
    codice:
    Main.java:178: cannot find symbol
    symbol  : class PrintStream
    location: class Main
    		PrintStream ps = null;
    		^
    
    Main.java:180: cannot find symbol
    symbol  : class PrintStream
    location: class Main
    		ps = new PrintStream (new FileOutputStream ("nome_del_file") );
    		^
    Main.java:180: cannot find symbol
    symbol  : class FileOutputStream
    location: class Main
    		ps = new PrintStream (new FileOutputStream ("nome_del_file") );
    		^
    Main.java:182: cannot find symbol
    symbol  : variable prov
    location: class Main
    		ps.print(prov[i] + " ");
    		^
    Main.java:184: cannot find symbol
    symbol  : variable prov
    location: class Main
    		ps.print(prov[prov.lenght-1]);
    		^
    Main.java:184: cannot find symbol
    symbol  : variable prov
    location: class Main
    		ps.print(prov[prov.lenght-1]);
    		^
    Main.java:184: cannot find symbol
    symbol  : variable prov
    location: class Main
    		ps.print(prov[prov.lenght-1]);
    		^
    6 error
    Per quanto ne capisco, dovrebbero essere variabili non dichiarate... cosa che ovviamente non so come e dove va fatta

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Devi importare il package java.io.*;


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Funzia, ma mi stampa solo alcuni valori, non il vettore totale (4 valori di 31), come mai?

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Mi pare molto strano... del resto il ciclo for percorre tutto l'array tranne l'ultimo, che viene stampato fuori... sei sicuro che nel punto in cui hai messo il codice, l'array sia completamente inizializzato?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    PENSO di si.
    L'ho inserito in getNewValue prima del "return ris".
    Ha senso fare in getNewValue
    codice:
    ...
    }
    ris = -ris;
    //qui va la tua funzione di stampa
    return ris;  
    }
    anzichè avere direttamente alla fine
    codice:
    return -ris;  // necessario perchè ogni valore in ris è negativo,
                  // ed io devo stampare i valori cambiati di segno

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.