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();
}
}
}
}