[informatica] Java: toString methode lukt niet

Moderators: ArcherBarry, Fuzzwood

Gebruikersavatar
Berichten: 768

Java: toString methode lukt niet

Hallo iedereen,

Ik heb het al aan een paar mensen gevraagd, maar zijn konden mij niet helpen. Daarom stel ik het hier maar eens (Voor de geïnteresseerden http://puu.sh/1PJsW ). Dit is mijn code:

Code: Selecteer alles


package ComplexeVeelterm;

public class Veelterm {

private Complex[] a;

public Veelterm(Complex[] b) {

Complex[] a = new Complex[b.length];

for (int i = 0; i < b.length; i++) {

a[i] = b[i];

}

}

public String toString() {

String s = "";

for (int i = 0; i < a.length; i++) {

s = a[i] + "*z^"+ i + " " + s;

}

return s;

}

  

      

}

Hij geeft een fout bij dit stukje:

Code: Selecteer alles


for (int i = 0; i < a.length; i++) {

Het Wetenschapsforum heeft ook een facebook pagina!

Gebruikersavatar
Berichten: 122

Re: Java: toString methode lukt niet

Nieuwslezer,

Dat komt waarschijnlijk omdat je de lengte van je array a niet hebt vastgelegd.

Probeer onderstaande code eens.

Code: Selecteer alles


private Complex a[] = new Complex[8];

Mvg,

Roger

Gebruikersavatar
Berichten: 768

Re: Java: toString methode lukt niet

Dan werkt het min of meer alleen krijg ik nu de rij {null, null, null, null, null, null, null, null}. Ik ga dan wel met een array werken omdat ik niet gebonden ben aan die lengte. Dan werkt het zoals het zou moeten. Wat verder staat er om een tabel van complexe getallen te genereren tussen 2 gegeven complexe getallen. Je krijgt dan als het ware een tabel met als rijen de Im delen en als kolommen de reële delen. Alleen wilt hij mijn tabel niet afdrukken. Ik vraag mij dan eigenlijk af of hij ze wel maakt.

Code: Selecteer alles


// De werkklasse:

Complex een = new Complex(1,1);

Complex twee = new Complex(1,2);

Complex[][] tabel = Veelterm.genereerTabel(een,twee, 1);

  for (int i = 0; i<tabel.length; i++){

   for (int j = 0; j<tabel[i].length; j++){

   System.out.println(tabel[i][j]+"\t");

   }

   System.out.println("\n");

   }

// De methode genereerTabel() :

static public Complex[][] genereerTabel(Complex begin, Complex eind, int stap){

  int lengte1 = (int)((eind.re - begin.re)/stap);

  int lengte2 = (int)((eind.im - begin.im)/stap);

  Complex[][] tabel = new Complex[lengte2][lengte1];

  for (int i = 0; i<lengte2; i++){

   for (int j = 0; j<lengte1; j++){

Complex a = new Complex(begin.re+j*stap, begin.im+i*stap);

tabel[i][j] = a;

   }

  }

  return tabel;

}

// Een stuk uit de klasse Complex:

public double re,im;

public Complex() {}   // no-arg constructor

public Complex(double reeelDeel,double imaginairDeel) {

  re=reeelDeel;

  im=imaginairDeel;

}

public Complex(Complex z) { // copy-constructor

  this(z.re,z.im);

}

public String toString() {

  String s = ""+re+" +I "+im;

  return s;

}

Het Wetenschapsforum heeft ook een facebook pagina!

Berichten: 7.068

Re: Java: toString methode lukt niet

Hij geeft een fout bij dit stukje:
Bij mij niet. Hoe bepaal je dat er hier een fout gegenereerd wordt?

Verder, wat moet 'genereerTabel' moeten doen?

Gebruikersavatar
Berichten: 768

Re: Java: toString methode lukt niet

EvilBro schreef: zo 20 jan 2013, 11:33
Bij mij niet. Hoe bepaal je dat er hier een fout gegenereerd wordt?
Java zei dat ik daar een fout had. Met een arraylist ipv een rij is dit probleem opgelost.

Eigenlijk moet er gewoon een tabel afgedrukt worden die alle complexe getallen bevat tussen 2 opgegeven complexe getallen.
Het Wetenschapsforum heeft ook een facebook pagina!

Berichten: 7.068

Re: Java: toString methode lukt niet

Java zei dat ik daar een fout had.
Hoe heb je dit getest? Wat was de exacte foutmelding?
Eigenlijk moet er gewoon een tabel afgedrukt worden die alle complexe getallen bevat tussen 2 opgegeven complexe getallen.
Dat is onmogelijk. Ik neem aan dat je bij twee complexe getallen in het complexe vlak een grid tekent van NxN en dat je dan op alle kruispunten van dat grid de complexe getallen gaat bepalen. Is dat het?

Gebruikersavatar
Berichten: 768

Re: Java: toString methode lukt niet

Het was een nullpointerexception
EvilBro schreef: zo 20 jan 2013, 12:44
Dat is onmogelijk. Ik neem aan dat je bij twee complexe getallen in het complexe vlak een grid tekent van NxN en dat je dan op alle kruispunten van dat grid de complexe getallen gaat bepalen. Is dat het?
Ja, dat bedoelde ik eigenlijk. Er wordt een stapgrootte meegegeven die hetzelfde is voor het reele deel en het imaginaire deel.
Het Wetenschapsforum heeft ook een facebook pagina!

Berichten: 7.068

Re: Java: toString methode lukt niet

Het was een nullpointerexception
Dat is een runtime error. Vermoeden: je had aan a niks toegekent. Als je dan a.length doet dan gaat het mis.

Gebruikersavatar
Berichten: 768

Re: Java: toString methode lukt niet

Ja inderdaad. Vandaar dat ik nu met een array werk. Je weet namelijk de lengte van die rij niet op voorhand.

Hoe doe je dan mijn 2de vraag?
Het Wetenschapsforum heeft ook een facebook pagina!

Berichten: 7.068

Re: Java: toString methode lukt niet

Ja inderdaad.
Nee, niet "ja inderdaad". Er is niks mis met je oorspronkelijke code (die je liet zien). Het probleem zit in je testcode. Als je denkt dat je iets moet veranderen aan je gegeven code dan heb je niet door wat er mis gaat.

Gebruikersavatar
Berichten: 768

Re: Java: toString methode lukt niet

Ben je zeker? Nu kan ik het niet meer testen omdat ik alles veranderd heb, maar ik dacht toch dat ik in mijn constructor een geldige rij had ingevuld.

EDIT: ik herinner me wel dat ik ik niet alleen op die regel een melding kreeg, maar ook in mijn werkklasse zelf. Waarschijnlijk zal je dus gelijk hebben want omdat het niet goed in de werkklasse zal gestaan hebben was er natuurlijk een nullpointer exception op die ene lijn net omdat het in de werkklasse niet goed stond. Ik denk nu wel dat ik dat snap.
Het Wetenschapsforum heeft ook een facebook pagina!

Berichten: 7.068

Re: Java: toString methode lukt niet

Code: Selecteer alles

public class Veelterm {



    private Complex[] a;



    public Veelterm(Complex[] b) {

        Complex[] a = new Complex[b.length];

        for (int i = 0; i < b.length; i++) {

            a[i] = b[i];

        }

    }



    public String toString() {



        String s = "";



        for (int i = 0; i < a.length; i++) {

            s = a[i] + "*z^"+ i + " " + s;

        }



        return s;

    }



}

en

Code: Selecteer alles


public class Test {



    /**

     * @param args

     */

    public static void main(String[] args) {

        Complex een = new Complex(1,1);

        Complex twee = new Complex(2,2);

        Complex[][] tabel = genereerTabel(een,twee, 2);



        for (int i = 0; i<tabel.length; i++){

            for (int j = 0; j<tabel[i].length; j++){

                System.out.print(tabel[i][j]+"\t");

            }

            System.out.println("");

        }

    }

    // De methode genereerTabel() :



    static public Complex[][] genereerTabel(Complex begin, Complex eind, int stap){

        double lengte1 = (eind.re - begin.re)/stap;

        double lengte2 = (eind.im - begin.im)/stap;



        Complex[][] tabel = new Complex[stap+1][stap+1];



        for (int i = 0; i<(stap+1); i++){

            for (int j = 0; j<(stap+1); j++){

                Complex a = new Complex(begin.re+j*lengte1, begin.im+i*lengte2);

                tabel[i][j] = a;

            }

        }



        return tabel;

    }



}
en je ziet dat het werkt.

Gebruikersavatar
Berichten: 768

Re: Java: toString methode lukt niet

Je krijgt dan inderdaad een tabel, maar toch niet diegene die je wil?

ik krijg dan deze:

1.0 +I 1.0 1.0 +I 1.0 1.0 +I 1.0

1.0 +I 1.0 1.0 +I 1.0 1.0 +I 1.0

1.0 +I 1.0 1.0 +I 1.0 1.0 +I 1.0
Het Wetenschapsforum heeft ook een facebook pagina!

Berichten: 7.068

Re: Java: toString methode lukt niet

Ik krijg met mijn code een ander resultaat.

Gebruikersavatar
Berichten: 768

Re: Java: toString methode lukt niet

ik heb nochtans al je codes er in geplaatst, maar waarschijnlijk hier of daar nog iets verkeerd.

Het belangrijkste is waarom je veranderd hebt wat je veranderd hebt. Waarom was mijn implementatie van genereerTabel fout?
Het Wetenschapsforum heeft ook een facebook pagina!

Reageer