[java] inhoud ArrayList optellen

Pagina: 1
Acties:
  • 801 views sinds 30-01-2008
  • Reageer

  • cenix
  • Registratie: September 2001
  • Laatst online: 25-05 17:24
Ik wil de inhoud van een arrayList (bestaat uit Rationale (12/20) getallen) optellen.
Hiervoor heb ik het volgende bedacht, maar om de een of andere reden wil hij de getallen niet optellen. Hij geeft continue 0/0 terug.

ps. de System.out statements zijn puur voor debugging

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  public Rationaal sum() {
    Rationaal sum = new Rationaal(0,0);

    if (this.lijst.size() > 0) {

      for (int i = 0; i < this.lijst.size(); i++) {
        System.out.println("+++"+this.lijst.get(i).toString());
        sum = sum.plus((Rationaal)this.lijst.get(i));
        System.out.println(sum.toString());
      }
      return sum;

    }
    return null;
  }


als ik de regel
Java:
1
sum = sum.plus(...)

vervang in

Java:
1
sum = (Rationaal)this.lijst.get(i); 

werkt het wel. Als ik deze regel vervang in

Java:
1
sum.plus((Rationaal)this.lijst.get(i));

werkt het ook.
Dus hij verkrijgt wel het goede Rationale getal.

Uitvoer:
code:
1
2
3
4
5
6
+++12/20
0/0
+++6/20
0/0
+++9/30
0/0


Wat doe ik hier fout :?

[ Voor 12% gewijzigd door cenix op 31-12-2003 17:20 ]


  • cenix
  • Registratie: September 2001
  • Laatst online: 25-05 17:24
Werkelijk niemand een idee? 8)7

Laat ik dan vragen: "Is mijn gedachtengang correct of doe ik hier iets fout?"

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wat returned de plus methode van Rationaal? De Rationaal van voor of na de optel-operatie?

(oftewel, moet je wel het resultaat van de plus-methode opvangen aangezien het mogelijk is dat er om wat voor reden dan ook juist als returnwaarde de originele Rationaal wordt teruggegeven en jij dus steeds het resultaat van je optelling kwijtmaakt met je =)

[ Voor 60% gewijzigd door ACM op 01-01-2004 17:43 ]


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Java:
1
sum.plus((Rationaal)this.lijst.get(i));

zou de correcte code moeten zijn lijkt me. Ik ken de code natuurlijk niet, maar het lijkt me dat bij het rationale getal sum nu het getal uit de lijst wordt opgeteld.
Als je
Java:
1
sum = sum.plus((Rationaal)this.lijst.get(i));

doet, dan ken je het resultaat van de methode plus toe aan sum. Kennelijk is het resultaat van de methode niet de som van sum en het meegegeven rationale getal, maar iets anders.

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 24-05 20:08
Zoals ik het nu zie is er waarschijnlijk een fout in je plus(Rationaal) methode.

Verwijderd

Gokje, deze regel:
code:
1
Rationaal sum = new Rationaal(0,0);

initialiseert sum op 0/0, wat onmogelijk is. 0/0 + x/y blijft dus ongedefineerd, en blijft dus 0/0 in je Rationaal klasse. Probeer eens:
code:
1
Rationaal sum = new Rationaal(0,1);

(Of anders een andere code die 0/1 als startwaarde oplevert, ik weet de volgorde van de parameters natuurlijk niet)

  • cenix
  • Registratie: September 2001
  • Laatst online: 25-05 17:24
Mijn methode returned de juiste waarde (als ik het stand-alone probeer) geeft hij de juiste waarde terug.

Hieronder de plus methode van de klasse Rationaal
Java:
1
2
3
4
  public Rationaal plus(Rationaal r)
  {
    return new Rationaal (teller*r.noemer + r.teller*noemer, noemer*r.noemer);
  }



Ook een andere startwaarde ipv (0/0) heeft geen resultaat. Hij geeft de nieuwe
startwaarde terug.

[ Voor 3% gewijzigd door cenix op 02-01-2004 12:12 ]


  • Denhomer
  • Registratie: Augustus 2000
  • Laatst online: 12-10-2025

Denhomer

Doh !

cenix schreef op 02 januari 2004 @ 12:11:
Mijn methode returned de juiste waarde (als ik het stand-alone probeer) geeft hij de juiste waarde terug.

Hieronder de plus methode van de klasse Rationaal
Java:
1
2
3
4
  public Rationaal plus(Rationaal r)
  {
    return new Rationaal (teller*r.noemer + r.teller*noemer, noemer*r.noemer);
  }



Ook een andere startwaarde ipv (0/0) heeft geen resultaat. Hij geeft de nieuwe
startwaarde terug.
De plus methode die je hier uitschrijft lijkt me niet zo goed gekozen, als je aan een methode plus denkt zou je denken dat hij de parameter bij zichzelf opteld, en niets returned. Als je dit dan ook uitwerkt denk ik dat je minder problemen gaat hebben.

Verwijderd

Mischien dat het komt doordat je hem eerst op 0/0 zet en dan in je plus keer gebruikt? Wat ik bedoel is 0*1 blijft 0.
Je moet sum initialiseren met de eerste waarde van de array, zodat hij niet new rational (0*x+0*y,0*x) doet

Verwijderd

En waarom maak je een nieuw Rationaal object aan bij sum, hoog de private variabelen op van Rationaal, ipv het aanmaken van een nieuw object bij iedere optelling

  • cenix
  • Registratie: September 2001
  • Laatst online: 25-05 17:24
Momenteel heb ik hem zo opgelost. Via deze manier werkt hij vooralsnog.
Er moet natuurlijk wel nog veel getest worden.

Ik zal ook nog eens kijken of ik de standaard waarde niet beter kan zetten op het eerste item in de lijst.

Java:
1
2
3
4
5
6
7
8
9
10
  public Rationaal sum() {
    Rationaal sum = new Rationaal(1,1);
    if (this.lijst.size() > 0) {
      for (int i = 0; i < this.lijst.size(); i++) {
        sum = sum.plus((Rationaal)this.lijst.get(i));
      }
      return sum;
    }
    return null;
  }

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
cenix schreef op 02 januari 2004 @ 13:26:
Momenteel heb ik hem zo opgelost. Via deze manier werkt hij vooralsnog.
Er moet natuurlijk wel nog veel getest worden.

Ik zal ook nog eens kijken of ik de standaard waarde niet beter kan zetten op het eerste item in de lijst.

Java:
1
2
3
4
5
6
7
8
9
10
  public Rationaal sum() {
    Rationaal sum = new Rationaal(1,1);
    if (this.lijst.size() > 0) {
      for (int i = 0; i < this.lijst.size(); i++) {
        sum = sum.plus((Rationaal)this.lijst.get(i));
      }
      return sum;
    }
    return null;
  }
Ik kan me nauwelijks voorstellen dat hier ook het juiste antwoord uitkomt. Als je begint met tellen bij 1/1 kom je altijd 1 hoger uit dan de bedoeling is. Gezien je optelcode lijkt me
code:
1
Rationaal sum = new Rationaal(0,1);

een beter begin... ?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Is het niet netter om je sum-methode wat te wijzigen, zodat ie bijv zoiets doet:
Java:
1
2
3
4
5
6
7
8
9
public Rationaal plus(Rationaal r)
{
  if(this.teller == 0)
    return r; // Of en nieuwe Rationaal met de waarden van r natuurlijk
  else if(r.teller == 0)
   return this; // "" this ""
  else
    return new Rationaal (teller*r.noemer + r.teller*noemer, noemer*r.noemer);
}

Zodat je met 0/1 kan beginnen in je optelling en het ook niet fout gaat als er es een keer een 0/1 tussenzit...
Pagina: 1