Springen naar inhoud

Java: toString methode lukt niet



  • Log in om te kunnen reageren

#1

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 19 januari 2013 - 19:36

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:


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:

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

Veranderd door Kwintendr, 19 januari 2013 - 19:37

Het Wetenschapsforum heeft ook een facebook pagina!

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Energyfellow

    Energyfellow


  • >100 berichten
  • 122 berichten
  • Ervaren gebruiker

Geplaatst op 19 januari 2013 - 23:55

Nieuwslezer,

Dat komt waarschijnlijk omdat je de lengte van je array a niet hebt vastgelegd.
Probeer onderstaande code eens.
private Complex a[] = new Complex[8];

Mvg,
Roger

#3

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 20 januari 2013 - 09:50

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.

// 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!

#4

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 20 januari 2013 - 11:33

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?

#5

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 20 januari 2013 - 12:32

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!

#6

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 20 januari 2013 - 12:44

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?

#7

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 20 januari 2013 - 12:51

Het was een nullpointerexception


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!

#8

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 20 januari 2013 - 13:04

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.

#9

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 20 januari 2013 - 13:15

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!

#10

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 20 januari 2013 - 13:23

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.

#11

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 20 januari 2013 - 13:28

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.

Veranderd door Kwintendr, 20 januari 2013 - 13:29

Het Wetenschapsforum heeft ook een facebook pagina!

#12

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 20 januari 2013 - 14:00

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
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.

#13

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 20 januari 2013 - 14:13

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

Veranderd door Kwintendr, 20 januari 2013 - 14:13

Het Wetenschapsforum heeft ook een facebook pagina!

#14

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 20 januari 2013 - 14:42

Ik krijg met mijn code een ander resultaat.

#15

Kwintendr

    Kwintendr


  • >250 berichten
  • 768 berichten
  • VIP

Geplaatst op 20 januari 2013 - 14:56

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?

Veranderd door Kwintendr, 20 januari 2013 - 14:58

Het Wetenschapsforum heeft ook een facebook pagina!






Also tagged with one or more of these keywords: informatica

0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures