Avatar billede nanders Nybegynder
06. september 2003 - 14:26 Der er 20 kommentarer og
1 løsning

Kald til metoder i andre klasse mm.

Kære eksperter,

Jeg er ved at lave et edb-program i Java der analyserer Math.random funktionen.

Til det har jeg lavet klassen terning:

    public class terning
    {
 
    public int øjne;

    /**
    * kast() genererer et vilkårligt tal mellem 1 og 6.
    */
   
    public void kast()
    {
        øjne=(int) ((6*Math.random())+1);
    }

    /**
    * antalØjne() returnerer terningens aktuelle værdi.
    */
   
    public int antalØjne()
    {
    return øjne;
    }

}

, der indeholder metoderne kast() og antalØjne hvis funktioner fremgår af ovenstående.

For at analysere data har jeg lavet klassen statistiker.

Fra den vil jeg gå tilgå metoderne i klassen terning med kald såsom:

t1.kast() , hvor t1 er en ny terning – e.g  new terning e.lign.

for derefter at lave en metode udførEksperiment, hvor jeg kumulerer antallet af de forskellige forsøg.

Nedenfor viser jeg min klasse statistiker, der er fuld af fejl.

public class statistiker
{
   
    private int enere;
    private int toere;
    private int treere;
    private int firere;
    private int femere;
    private int seksere;
   
    terning t1 = new terning();

    /**
    * Constructor for objects of class statistiker
    */
   
    public statistiker(int antalforsøg)
        {
        antalforsøg = antalforsøg;
    }

    /**
    */
    public int udføreksperiment(int y)
    {
    for (i=1,i<=antalforsøg,i=i+1) {
    t1.kast();
    if (t1.antaløjne==1) {
    enere = enere + 1;
    }
    else {} //osv.
   
    } 
   
    /** behandel data */
   
    }
}

Hjælp til denne klasse ønskes, specielt det med at oprette en ny terning i statistiker så jeg kan kalde metoderne i terning. Der er vist også noget galt med for løkken.

På forhånd tak

nanders
Avatar billede arne_v Ekspert
06. september 2003 - 14:48 #1
Der er semikolon ikke komma mellem de 3 dele af en for løkke.
Avatar billede arne_v Ekspert
06. september 2003 - 14:49 #2
Jeg ville erstatte de 6 variable enere-seksere med et array.

private int[] stats = new int[6];
Avatar billede arne_v Ekspert
06. september 2003 - 14:50 #3
for(int i = 1; i <= antalforsøg; i++) {
  t1.kast();
  stats[t1.antalØjne()]++;
}
Avatar billede arne_v Ekspert
06. september 2003 - 14:52 #4
Det dækker vist nogenlunde.

Jeg kan hurtigt lave et komplet eksempel hvis du vil (men muligvis
lærer du mere ved selv at lave det udfra ideerne).
Avatar billede nanders Nybegynder
06. september 2003 - 15:04 #5
Det var nu det med at kunne kalde metoderne i terning der er det væsentligste. Jeg er interesseret i at vide hvordan man gør, altså ideerne.

F.eks. kan jeg nævne, at jeg ikke ved om

terning t1 = new terning();

virker, idet jeg får meddelelsen "cannot resolve symbol" på

for(int i = 1; i <= antalforsøg; i++) {
  t1.kast();
}
Avatar billede arne_v Ekspert
06. september 2003 - 15:07 #6
Det er den rigtige måde at kalde på.
Avatar billede arne_v Ekspert
06. september 2003 - 15:09 #7
public statistiker(int antalforsøg) {
        antalforsøg = antalforsøg;
}

skal være:

private int antalforsøg;
public statistiker(int antalforsøg) {
        this.antalforsøg = antalforsøg;
}
Avatar billede arne_v Ekspert
06. september 2003 - 15:11 #8
antalforsøg kan gemmes for at kunne bruges i for løkken.
Avatar billede nanders Nybegynder
06. september 2003 - 15:11 #9
Kære Arne,

Min compiler

Cannot resolve symbol

        this.antalforsøg = antalforsøg;

Jeg undrede mig også meget over det i første omgang
Avatar billede arne_v Ekspert
06. september 2003 - 15:13 #10
Fik du erklæret antalforsøg ?

private int antalforsøg; // <-----
public statistiker(int antalforsøg) {
        this.antalforsøg = antalforsøg;
}
Avatar billede nanders Nybegynder
06. september 2003 - 15:14 #11
Kære Arne

Jeg havde glemt at initiere antalforsøg. Tak.

Imidlertid siger den nu, at der mangler en return i nedenstående, men antalØjne() returnerer jo netop øjne.

public int udføreksperiment() {
    for(int i = 1; i <= antalforsøg; i++) {
    t1.kast();
    t1.antalØjne();
        } 
    }
Avatar billede arne_v Ekspert
06. september 2003 - 15:19 #12
t1.antalØjne returnerer en int.

Men udføreksperiment returnerer ikke en int.
Avatar billede arne_v Ekspert
06. september 2003 - 15:20 #13
Enten skal det være:

public void udføreksperiment() {

eller så skal du have en return af en int værdi.
Avatar billede arne_v Ekspert
06. september 2003 - 15:33 #14
Jeg har iøvrigt lavet et komplet eksempel nu.

Vil du se det ?  (det er lidt anderledes end dit)
Avatar billede nanders Nybegynder
06. september 2003 - 15:42 #15
Hej Arne,

Ellers tak - men det er virkelig virkelig fornemt.

Hvis du kunne svare på hvorfor nedenstående, med et kald til constructoren på 100 antalforsøg giver 100 af hver terning værdi ville jeg være meget taknemmelig.

Se her:

public statistiker(int antalforsøg)
        {
        this.antalforsøg = antalforsøg;
    }

    /**
    */
    public void udføreksperiment() {
       
    for(int i = 1; i <= antalforsøg; i++) {
   
    t1.kast();
   
    if (t1.antalØjne() == 1);
    {
    enere = enere + 1;
    }
    if (t1.antalØjne() == 2);
    {
    toere = toere + 1;
    }
    if (t1.antalØjne() == 3);
    {
    treere = treere + 1;
    }
    if (t1.antalØjne() == 4);
    {
    firere = firere + 1;
    }
    if (t1.antalØjne() == 5);
    {
    femere = femere + 1;
    }
    if (t1.antalØjne() == 6);
    {
    seksere = seksere + 1;
    }
   
    } 
   
    System.out.println("Antal enere er= " + enere);
    System.out.println("Antal toere er= " + toere);
    System.out.println("Antal treere er= " + treere);
    System.out.println("Antal firere er= " + firere);
    System.out.println("Antal femere er= " + femere);
    System.out.println("Antal seksere er= " + seksere);
 
  }
Avatar billede arne_v Ekspert
06. september 2003 - 16:05 #16
if (t1.antalØjne() == 1);
    {
    enere = enere + 1;
    }

betyder:

hvis antal øjne er lig med 1 så gør ingenting, derefter tæl enere op
Avatar billede arne_v Ekspert
06. september 2003 - 16:05 #17
if (t1.antalØjne() == 1) // <----- uden semikolon her
    {
    enere = enere + 1;
    }

er det du vil.
Avatar billede nanders Nybegynder
06. september 2003 - 16:14 #18
Hej Arne,

Ja lige præcis.

Men hvorfor hjalp det bare at fjerne semikolonnerne ?

NB. Jeg skal også have givet dig nogle point.

/nanders
Avatar billede arne_v Ekspert
06. september 2003 - 16:23 #19
Fordi if sætningen kun gjaldt til og med det semikolon.
Avatar billede arne_v Ekspert
06. september 2003 - 16:23 #20
svar
Avatar billede arne_v Ekspert
06. september 2003 - 16:27 #21
if (t1.antalØjne() == 1);
    {
    enere = enere + 1;
    }

(med semikolong er det samme som:

    if (t1.antalØjne() == 1) {
    }
    enere = enere + 1;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester