Pagina 4 di 4 primaprima ... 2 3 4
Visualizzazione dei risultati da 31 a 38 su 38
  1. #31
    Visto che sappiamo esattamente il numero di elementi di ogni categoria,
    che ne dici di utilizzare un normale vettore anziche' ArrayList??
    Nulla, ma e' sempre qualcosa.

  2. #32
    Questa e' la versione con i vettori:

    codice:
    import java.util.Iterator;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.nio.MappedByteBuffer;
    import java.util.ArrayList;
    import java.util.ListIterator;
    import java.util.NoSuchElementException;
    import java.util.StringTokenizer;
    import lib.FileChannelUtilityes.InChannel;
    
    /*
     * ReadStars.java
     *
     * Created on 21 giugno 2006, 18.57
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
    
    /**
     *
     * @author mau2
     */
    public class ReadStars2 {
        
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            //creiamo l'oggetto File(non apre lo stream di input)
            
            File file = new File("lte100-3.5-0.0.spec");
            if(!file.isFile()){
                System.err.println("File non torvato.");
                System.exit(1);
            }
            
            //Apriamo lo stream di input e mappiamo il file in memoria
            //(ovvero dall'hard disk alla ram) per accedere ai dati ad
            //alta velocita'.
            //Malgrado questa accortezza il programma risulta essere lento
            //figuriamoci se leggessimo una riga per volta dal file
            //se il file avesse 100000 righe la testina dell'hard disk
            //si sposterebbe 100000 volte!!!!
            MappedByteBuffer buf = new InChannel(file).map().load();
            
            //creiamo le prime 3 variabili per la prima riga ed estrazione valori
            //dal file
            double var1, var2, var3;
            StringTokenizer tok = new StringTokenizer(getLine(buf, "ascii"), " ,");
            var1 = Double.parseDouble(tok.nextToken());
            var2 = Double.parseDouble(tok.nextToken().trim());
            var3 = Double.parseDouble(tok.nextToken().trim());
            
            //creiamo la variabile che contiene il numero totale dei valori
            //delle categorie ed estrazione del valore dal file
            tok = new StringTokenizer(getLine(buf, "ascii"), " ,");
            int numberOfElementCat = Integer.parseInt(tok.nextToken());
            
            
            //creiamo le liste che conterranno i valori delle 3 categorie
            //e la relativa estrazione dal file
                    double[] cat1 = new double[numberOfElementCat];
            double[] cat2 = new double[numberOfElementCat];
            double[] cat3 = new double[numberOfElementCat];
            
            
            //popoliamo la prima categoria
            int i = 0;
            do {
                tok = new StringTokenizer(getLine(buf, "ascii"), " ");
                
                while (tok.hasMoreElements()){
                    cat1[i] = Double.parseDouble(tok.nextToken());
                    i++;
                }
            }while (!(i == numberOfElementCat));
            
            //popoliamo la seconda categoria
            i = 0;
            do {
                tok = new StringTokenizer(getLine(buf, "ascii"), " ");
                
                while (tok.hasMoreElements()){
                    cat2[i] = Double.parseDouble(tok.nextToken());
                    i++;
                }
            }while (!(i == numberOfElementCat));
            
            //popoliamo la terzacategoria
            i = 0;
            do {
                tok = new StringTokenizer(getLine(buf, "ascii"), " ");
                
                while (tok.hasMoreElements()){
                    cat3[i] = Double.parseDouble(tok.nextToken());
                    i++;
                }
            }while (!(i == numberOfElementCat));
            
            
            
            //visualizza i 3 valori della prima riga
            System.out.println("var1 = " + var1 + "\n" +
                    "var2 = " + var2 + "\n" +
                    "var3 = " + var3);
            //visualizza il numero totale di elementi delle categorie
            System.out.println("numberOfElementCat = " + numberOfElementCat);
            
            
            //visualizza gli elementi della prima categoria
            System.out.println("Prima categoria:");        
            for (int j = 0; j < numberOfElementCat; j++) {
                if((j%4 == 0))
                    System.out.println();            
                System.out.print(cat1[j] + " ");             
            }
            
            //visualizza gli elementi della seconda categoria
            System.out.println("\n\n\n\n\nSeconda categoria:");
            for (int j = 0; j < numberOfElementCat; j++) {
                if((j%6 == 0))
                    System.out.println();            
                System.out.print(cat2[j] + " ");             
            }
            
            //visualizza gli elementi della terza categoria
            System.out.println("\n\n\n\n\nTerza categoria:");
            for (int j = 0; j < numberOfElementCat; j++) {
                if((j%6 == 0))
                    System.out.println();            
                System.out.print(cat3[j] + " ");             
            }
            
            
            
            
            
        }
        
        public static String getLine(MappedByteBuffer buf, String charset){
            
            StringBuffer strBuf = new StringBuffer("");
            char ch = '\0';
            
            if(charset.equalsIgnoreCase("ASCII")){
                while ( (ch != 10) && (buf.position() != buf.limit())  ){
                    ch = (char)buf.get();
                    strBuf.append(ch);
                }
            }else if(charset.equalsIgnoreCase("UNICODE")){
                while ( (ch != 10) && (buf.position() != buf.limit())  ){
                    ch = buf.getChar();
                    strBuf.append(ch);
                }
            }else
                throw new IllegalArgumentException("L'argomento charset e' errato.");
            
            return strBuf.toString();
            
        }
        
        
        
    }
    Nulla, ma e' sempre qualcosa.

  3. #33
    Inanzitutto grazie ad entrambi per l'aiuto che mi avete dato...
    Ho provato a compilare la versione con i vettori (visto che, non conoscendo java, avevo più familiarità con questi anzichè con l'arraylist) e, poichè attualmente dispongo solo di netbeans sotto win Xp (anche se tra breve lavorerò sotto linux senza interfaccia grafica) ho riscontrato alcuni problemi...
    Inanzitutto volevo sapere se la libreria di supporto va messa nella stessa cartella col file principale (se si l'ho fatto), così come il file da studiare. Quando sotto netbeans provo a fare build (che dovrebbe, se non erro, essere il comando per compilare) mi compare:


    javac: invalid target release: 1.5

    Usage: javac <options> <source files>

    where possible options include:

    -g Generate all debugging info

    -g:none Generate no debugging info

    -g:{lines,vars,source} Generate only some debugging info

    -nowarn Generate no warnings

    -verbose Output messages about what the compiler is doing

    -deprecation Output source locations where deprecated APIs are used

    -classpath <path> Specify where to find user class files

    -sourcepath <path> Specify where to find input source files

    -bootclasspath <path> Override location of bootstrap class files

    -extdirs <dirs> Override location of installed extensions

    -d <directory> Specify where to place generated class files

    -encoding <encoding> Specify character encoding used by source files

    -source <release> Provide source compatibility with specified release

    -target <release> Generate class files for specific VM version

    -help Print a synopsis of standard options


    BUILD FAILED (total time: 3 seconds)



    cosa posso fare per risolverlo? E' solo un problema del netbeans o il programma dà errore?
    Inoltre, siccome il programma dovrà comunque eseguire dei calcoli successivamente (tra cui scrivere su un altro file), si può modificare creando una classe principale in cui fare i conti e poi richiamare la classe per la lettura, per la scrittura, ecc? Se si, come conviene passare i valori di array e company?

  4. #34
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    rispondo solo sul javac
    praticamente dice che -target 1.5 per lui non è valido
    io credo che stai compilando con un jdk come la 1.4

  5. #35
    Originariamente inviato da floyd
    rispondo solo sul javac
    praticamente dice che -target 1.5 per lui non è valido
    io credo che stai compilando con un jdk come la 1.4
    Ho scaricato j2sdk 1_4_2_10, non va bene? Mi pare fosse uno degli ultimi...

  6. #36
    Ciao anche io uso NetBeans ma l'ultima versione.
    Devi mettere la libreria(i sorgenti) nella cartella src
    del progetto,
    pero' devi notare che essa e' in un package:
    package lib.FileChannelUtilityes;
    Quindi devi creare due cartelle una lib e l'altra all'interno
    FileChannelUtilityes e ci metti dentro la mia classe.
    il Tutto dentro src!!
    Puoi creare i package direttamente dall'IDE.
    Nulla, ma e' sempre qualcosa.

  7. #37
    Nel programma che ti ho postato hai gia' tutti i dati e ci ppuoi fare cio'
    che vuoi, puoi realizzare una classe a parte che elabori i dati come desideri.
    Nulla, ma e' sempre qualcosa.

  8. #38
    Avevo provato a scrivere lo stesso programma in maniera un tantino più semplice (tanto non mi importa che impieghi molto tempo per leggere visto che girerà su un computer bello potente!), tenendo conto di quanto detto negli ultimi post.
    Probabilmente sarà pieno di errori (uno già me lo dà in fase di running), ma qualcuno potrebbe guardarlo per dirmi cosa non va?

    codice:
      
    import java.util.*; // non sapevo esattamente quali librerie importare
    import java.io.*; //idem
    
            
    public class lettura {
        
         public static void main(String[] args)  throws IOException   {
             BufferedReader filebuf = new BufferedReader(new FileReader("lte100-3.5-0.0.spec")); 
    	
    	String nextStr;
            double Teff, logg, metal;
    	nextStr = filebuf.readLine();     // legge la prima riga del file
            StringTokenizer tok = new StringTokenizer(nextStr, " ");
            //assegno le prime tre variabili
            Teff = Double.parseDouble(tok.nextToken());
            logg = Double.parseDouble(tok.nextToken().trim());
            metal = Double.parseDouble(tok.nextToken().trim());
            
            nextStr = filebuf.readLine(); //leggo la seconda riga
            tok = new StringTokenizer(nextStr, " ");
            int points = Integer.parseInt(tok.nextToken());
    
            double[] lambda = new double[points];
            double[] flux = new double[points];
            double[] planck = new double[points];
    
    	while (nextStr != null){
                
               //prima categoria
               int i = 0;
               do {
                    nextStr = filebuf.readLine(); 
                    tok = new StringTokenizer(nextStr, " ");
                	while (tok.hasMoreElements()){
                    	lambda[i] = Double.parseDouble(tok.nextToken());
                    	i++;
                    	}
            	}while (!(i == points));
               
               //seconda categoria
               i = 0;
               do {
                   nextStr = filebuf.readLine(); 
                   tok = new StringTokenizer(nextStr, " ");
                   while (tok.hasMoreElements()){
                    	flux[i] = Double.parseDouble(tok.nextToken());
                  		i++;
                   		}
          	      }while (!(i == points));
            
    
               //terzacategoria
                i = 0;
                   do {
                	nextStr = filebuf.readLine(); 
                	tok = new StringTokenizer(nextStr, " ");
                    while (tok.hasMoreElements()){
                   	 	planck[i] = Double.parseDouble(tok.nextToken());
                   	 	i++;
               		 }
         		   }while (!(i == points));
                
    	} 	
            
          filebuf.close();  
    
              System.out.println("\nTemperatura efficace = " + Teff + "\n" +
                    "log g = " + logg + "\n" +
                    "[M/H] = " + metal+ "\n" + "Numero di punti = " + points );
            
            //visualizza tutti gli elementi in colonna
              
            System.out.println("\nLunghezza d'onda, flusso e funzione di planck incolonnati:");
            for (int j = 0; j < points; j++) {
                System.out.println();            
                System.out.print(lambda[j] + "     "+ flux[j] + "     " + planck[j]);
             
           }
        }
    }
    Il problema si ha quando vado ad eseguire con netbeans, infatti compare la scritta:


    init:
    deps-jar:
    Created dir: C:\Documents and Settings\prova\build\classes
    Compiling 1 source file to C:\Documents and Settings\prova\build\classes
    compile-single:
    run-single:
    Exception in thread "main" java.lang.NullPointerException
    at java.util.StringTokenizer.<init>(StringTokenizer.j ava:182)
    at java.util.StringTokenizer.<init>(StringTokenizer.j ava:204)
    at prova.main(prova.java:32)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 1 second)


    Presumo sia un errore dovuto al fatto che non so come gestire le eccezioni, ma di preciso cos'ho combinato?

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.