Ciao a tutti!!!
Sono una nuova utente, mi sono affacciata al modo Java da pochissimo e ho un minimini background in C/C++.
Dopo giornate di scervellamento ho finalmente ottenuto un codice che fa quello che voglio...il problema che ho ora peró é che devo renderlo a classi, ovvero ora ho tutto in main, ed ovviamente non é quello che voglio...
Dunque il mio codice fa:
legge una serie di punti da file, raggruppa questi in punti di tre in tre e calcola le medie sulle y. Ad una ad una compara le medie e restituisce le rispettive x quendo si ha un "salto" nelle medie.
Di seguito il mio codice...
Allego anche il txt, e aggiungo che nel caso di questo txt di esempio il programma mi devo restituire primo jump x=21, secondo jump x=104, T = 83.
Lo fa.. ma non ho la piú pallida idea di come rendere il tutto object oriented....
Qualcuno che mi possa aiutare???
grassssie
codice:import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.StringTokenizer; public class ReadFile { public static void main(String[] args) throws IOException { BufferedReader br = null; try{ String line; /*interval for calculating average, 100ns*/ int n=3; /*energy threshold, change in average indicating a jump*/ double m=3; /*other constants*/ int j=0, k=0; double Sum=0, Ave1=0, Ave2=0; double T1=0, T2=0, T=0; boolean first_time = true, first_time_ave = true, second_time_ave = true; br = new BufferedReader(new FileReader("prova2.txt")); while ((line = br.readLine()) != null) { StringTokenizer stringTokenizer = new StringTokenizer(line, " "); while (stringTokenizer.hasMoreElements()) { double x = Double.parseDouble(stringTokenizer.nextElement().toString()); double y = Double.parseDouble(stringTokenizer.nextElement().toString()); if (k == 0 && first_time_ave == true) T1=x; //fissare il primo elemento x per il primo salto else if (k == 0 && first_time_ave == false && second_time_ave == true) T2=x; //fissare ogni volta il primo elemento, secondo salto if(k<n) { Sum += y; k++; System.out.println("y = " + y); } if(k==n) { if(first_time == true) { Ave1=Sum/3; System.out.println("sum y = " + Sum); System.out.println("Ave.1 = " + Ave1); first_time = false; Sum=0; k=0; } else { Ave2=Sum/3; System.out.println("sum y = " + Sum); System.out.println("Ave.i = " + Ave2); if (Math.abs(Ave1-Ave2) > m) { if(first_time_ave == true) { System.out.println("First jump at x = " + T1); Sum=0; k=0; Ave1=Ave2; Ave2=0; first_time_ave = false; } else { System.out.println("Second jump at x = " + T2); Sum=0; k=0; Ave1=Ave2; Ave2=0; second_time_ave = false; } } else { Sum=0; k=0; Ave1=Ave2; Ave2=0; } } } StringBuilder sb = new StringBuilder(); } } if (second_time_ave == true) System.out.println("Recoil at t = " + T1 + " But NO alpha decay"); else { T = Math.abs(T1-T2); System.out.println("\nDifference in time is : T = " + T + "\n"); } System.out.println("Done\n"); } catch (NumberFormatException e) { System.out.println(e.toString()); } finally { try { if (br != null) br.close(); } catch (IOException ex) { ex.printStackTrace(); } } } }




Rispondi quotando

