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
.