PDA

Visualizza la versione completa : [JAVA] Calcolo media e varianza su cambiamento stati


Cr4ckz!
23-02-2006, 16:02
ciao a tutti,
ho un piccolo problema con un esercizio di scuola...che mi serviva per prepararmi ad un compito...
ma, purtroppo, non funge e non riesco a capirne il motivo :dhò:

per chiarire meglio la situazione, vi posto anche un'immagine..
http://www.studiolibero.com/travian/es.jpg

in poche parole, il programma deve simulare il passaggio da uno stato all'altro,contare quante volte è passato per uno stato e calcolare, infine, la media e la varianza su 5 prove composte da 10000 "giri"...
le condizioni per passare da uno stato all'altro è la probabilità che ho segnato sulle varie freccie...

ecco il programma:

CLASSE STATI:

public class Stati {
private double var[]=new double[3],med[]=new double[3];
public void Stati() {
int stato=0,java,i,j,num;
int freqAss[]=new int[3];
Random rd=new Random();
for(j=0;j<5;j++){
for(i=0;i<3;i++)
freqAss[i]=0;
stato=0;
for(i=0;i<1000;i++){
switch(stato){
case 0: num=rd.nextInt(4);
if(num<=2){
freqAss[0]++;
System.out.println("\nResta in stato 0");
stato=0;
}
else{
freqAss[1]++;
stato=1;
System.out.println("\nVa in stato 1");
}
break;
case 1: num=rd.nextInt(3);
if(num==0){
freqAss[1]++;
stato=1;
System.out.println("\nResta in stato 1");
}
else
if(num==1){
freqAss[0]++;
stato=0;
System.out.println("\nVa in stato 0");
}
else{
freqAss[2]++;
stato=2;
System.out.println("\nVa in stato 2");
}
break;
case 2: num=rd.nextInt(2);
if(num==1){
freqAss[2]++;
stato=2;
System.out.println("\nResta in stato 2");
}
else{
freqAss[0]++;
stato=0;
System.out.println("\nVa in stato 0");
}
break;
}
}
for(i=0;i<3;i++){
med[i]+=freqAss[i]/10000;
var[i]+=(freqAss[i]/10000)*(freqAss[i]/10000);
}
}
for(i=0;i<3;i++){
med[i]/=5;
var[i]=var[i]/5-med[i]*med[i];
}
}
public void stampa(){
int i;
System.out.println("\nValori statistici risultanti: ");
System.out.println("\n------------------------------------");
for(i=0;i<3;i++)
System.out.println("\nStato "+i+" media: "+med[i]+" varianza: "+var[i]+"\n\n");
}
}

CLASSE MAIN:

public class Main {
public static void main(String args[]){
Stati rd=new Stati();
rd.stampa();
}
}

alka
23-02-2006, 16:10
Ho corretto il titolo. Per favore, usane di più significativi. :)

Cr4ckz!
23-02-2006, 16:12
ok sorry.... :D

Cr4ckz!
23-02-2006, 18:12
Ho provato a non usare le classi e metterlo tutto in un main...e funziona....
ho capito infatti che, quando usavo le classi, nel main mi richiamava solo il metodo stampa(rd.stamapa()) senza però eseguire Stati(rd=new Stati())
e non capisco perchè.... :(

Matteo982
24-02-2006, 02:31
Originariamente inviato da Cr4ckz!
Ho provato a non usare le classi e metterlo tutto in un main...e funziona....
ho capito infatti che, quando usavo le classi, nel main mi richiamava solo il metodo stampa(rd.stamapa()) senza però eseguire Stati(rd=new Stati())
e non capisco perchè.... :(
Il costruttore di una classe non va dichiarato con un tipo:

Sbagliato:
public void Stati()

Giusto:
public Stati()
Ciao. :ciauz:

Loading