Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Lettura file .txt

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    16

    Lettura file .txt

    Ciao a tutti vi spiego il mio problema: il mio algoritmo dovrebbe prendere in input un file .txt composto da N righe di interi; la prima riga contiene il numero dei valori successivi. La quota di partenza è 5000 e ogni riga (esclusa la prima) corrisponde a una variazione sulla quota (sia essa positiva che negativa). Il mio obiettivo è calcolare il dislivello massimo (il numero più alto tra la sequenza di interi), calcolare la quota massima raggiunta e infine stampare su un file di output (.txt) la quota più frequentemente rilevata. Mi spiego meglio: mi trovo a 5000 all'inizio, se nella seconda riga trovo 2 -> 5002 , terza riga 4 -> 5006, quarta riga -4 -> 5002; a questo punto la quota più frequentemente rilevata sarebbe 5002. Questo è il codice che ho realizzato:

    codice:
    import java.io.*; import java.util.Scanner;
    
    
    
    
    public class Messner { 
        
        public static void main(String[] args){
            int quotaPart = 5000; // inizializzo la quota di partenza a 5000 metri
            String line = null; // la stringa line verrà usata per indicare la stringa corrispondente nel file    
            Scanner sc = new Scanner(System.in); // creo l'oggetto sc che rappresenta la tastiera
            System.out.println("Inserire percorso file di input" + ""); // inserisco percorso file di input
            String percorsoinput = sc.nextLine(); // assegno a percorso input il percorso immesso tramite tastiera grazie al metodo nextLine() dello classe scanner
            
            try {
                BufferedReader in = new BufferedReader(new FileReader(percorsoinput));
                LineNumberReader lnr = new LineNumberReader (in); // per indicare il numero della riga creo un oggetto
                line = in.readLine();
                
                while ((line = lnr.readLine ()) != null){
                    // creo un ciclo while per sommare le misurazioni contenute 
                    // nel file di input
                    //
                    // se non è possibile convertire la stringa line in
                    // intero viene lanciata un'eccezione
                    // NumberFormatException (catturata sotto con catch
                    // apposito)
                    //
                    // uso un if per partire dalla seconda riga
                    // in quanto la prima indica il numero delle misurazioni e
                    // non una misurazione vera e propria
                    if (lnr.getLineNumber () == 1)
                        quotaPart=5000;
                    int numero = Integer.parseInt(line); // converto la stringa letta dal file in intero
                    quotaPart += numero;
                    arrayQuote[0]=quotaPart;
                    line = in.readLine();
                }
                
                in.close();
                System.out.println("Inserire percorso file di output" + ""); // inserisco il percorso del file di output 
                String percorsoutput = sc.nextLine(); // assegno a percorso output il percorso immesso tramite tastiera grazie al metodo nextLine() dello classe scanner
                File file = new File(percorsoutput); // creo un file che ha come destinazione il percorso inserito
                FileWriter fw = new FileWriter(file); // creo un oggetto per scrivere nel file
                String s = Integer.toString (quotaPart); // converto il parametro somma in stringa poiché il metodo vuole una stringa scritta nel file
                fw.write(s); // scrivo nel file il risultato delle misurazioni
                fw.close();
                
                // gestisco le varie eccezioni che posso incontrare con diversi catch
            } catch(FileNotFoundException e) {
                System.out.println(percorsoinput +"File non trovato");
            } catch(NumberFormatException e) {
                System.out.println("Linea non corretta: -> "+line+" <-");
            } catch(IOException e) {
                System.out.println("IOException  "+e);
            }
            System.out.println("Dislivello calcolato e scritto nel file scelto come destinazione");
        }
    }
    Avevo pensato di inserire la somma algebrica per ogni riga in un array e poi contare le occorrenze con un for, io però non sono riuscito a risolvere tutte le cose, solo a stampare la somma algebrica poiché non sono riuscito a mettere ogni volta il risultato della somma nell'array. Inoltre mi servirebbe come scritto nelle specifiche anche il dislivello massimo e l'altezza massima raggiunta.

    Grazie in anticipo per le risposte, un saluto .

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora, visto che la prima riga del file contiene il numero di quote che andrai a leggere successivamente, tramite quello puoi andare a crearti un array:
    codice:
    int[] arrayQuote = new int[prima_riga];
    Ora il ciclo while va benissimo, ma "male" si sposa con l'array delle quote. Niente di grave: inizializzi un contatore al di fuori del while
    codice:
    int rigaQuota = 0;
    while (...
    e quando calcoli la nuova quota andrai ad inserirla nel tuo arrayQuote e ad aumentare il contatore
    codice:
    arrayQuote[rigaQuota] = ...;
    rigaQuota++;
    PS: ad occhio hai un readline di troppo nel while (basta quello del ciclo while stesso)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    16
    Quote Originariamente inviata da Andrea1979 Visualizza il messaggio
    Allora, visto che la prima riga del file contiene il numero di quote che andrai a leggere successivamente, tramite quello puoi andare a crearti un array:
    codice:
    int[] arrayQuote = new int[prima_riga];

    Ora il ciclo while va benissimo, ma "male" si sposa con l'array delle quote. Niente di grave: inizializzi un contatore al di fuori del while
    codice:
    int rigaQuota = 0;
    while (...
    e quando calcoli la nuova quota andrai ad inserirla nel tuo arrayQuote e ad aumentare il contatore
    codice:
    arrayQuote[rigaQuota] = ...;
    rigaQuota++;
    PS: ad occhio hai un readline di troppo nel while (basta quello del ciclo while stesso)
    Grazie mille ho risolto la questione dell'array.

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.