Avatar billede themepark Nybegynder
29. marts 2005 - 17:54 Der er 19 kommentarer

Problemer med Constructor class, der opretter en Polygon

Jeg har lavet en class, der extends Polygon, og i dens constructor overfører jeg en x og en y-værdi, og vil så beregne de resterende punkter ud fra de 2 værdier. Men hvordan opretter jeg min polygon i min constructor? Skal jeg til at bruge add, for hvert eneste punkt, eller kan jeg oprette den på en smartere måde? Så vidt jeg kan se, kan jeg ikke bruge new Polygon(...)...i hvert fald ved jeg ikke, hvad jeg skal sætte før lighedstegnet så.

Venlig hilsen
Michael K. P.
Avatar billede bromer Nybegynder
29. marts 2005 - 17:58 #1
Hvis man ser på dokumentation for polygon [1] så kan du vel oprette et array med x og y værdier (et array til hver). Hver gang du beregner et punkt tilføjer du dem til array'et. Når du så har beregnet alle punkterne smider du de 2 arrays til constructoren i polyon.

[1] http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Polygon.html
Avatar billede themepark Nybegynder
29. marts 2005 - 18:00 #2
Hmm...et array var måske slet ikke så dum en ide...venter lige og ser om der er en nemmere løsning dog :)
Avatar billede bromer Nybegynder
29. marts 2005 - 18:02 #3
Udfra dokumentationen ved jeg ikke om der er? Hvordan ser din kode ud? Du kan jo også når du har beregnet et punkt tilføje det via addPoint. Så skal du bare oprette et tomt polygon.
Avatar billede themepark Nybegynder
29. marts 2005 - 18:05 #4
Det var netop det, jeg selv skrev, og det er det, der er mit problem, fordi det bliver lidt besværligt med add, synes jeg :) Tænkte, at man vel kunne oprette et polygon i constructoren med this = new Polygon(...)...jeg ved bare ikke hvad der skulle stå i stedet for this, for det ser ikke ud til at være det rigtige.
Avatar billede themepark Nybegynder
29. marts 2005 - 18:07 #5
Ja, fejlen var at det der står før =, skal være en variabel :(
Avatar billede themepark Nybegynder
29. marts 2005 - 18:09 #6
Hmm...jeg tror faktisk, jeg lige har opdaget, hvordan jeg gør (hvis det virker). Jeg behøver ikke this, men kun new Polygon(...) i min constructor :)
Avatar billede bromer Nybegynder
29. marts 2005 - 18:10 #7
Ja, det er ikke så smart. Følgende kode opretter et tomt polygon:

import java.awt.Polygon;

class poltest {


        public static void main(String[] args) {
                Polygon p;
                p = new Polygon();
        }
}
Avatar billede themepark Nybegynder
29. marts 2005 - 18:13 #8
Yep, den er jeg skam med på, mere newbie er jeg trods alt heller ikke ;) Jeg vidste bare ikke hvordan jeg nemmest muligt lavede mit Polygon i min constructor, men det tror jeg faktisk, som nævnt før, at jeg selv har fundet ud af nu...Testing in progress :)
Avatar billede bromer Nybegynder
29. marts 2005 - 18:17 #9
Okay, det var mere fordi du skrev "this = new Polygon()" hvilket jeg synes var lidt farligt. Hvordan ser linierne ud omkring "new Polygon()"?
Avatar billede themepark Nybegynder
29. marts 2005 - 18:18 #10
Ja, det var jo blot mit eksempel på hvordan jeg ville tilføje punkterne til min class, som jo er en Polygon :)
Avatar billede bromer Nybegynder
29. marts 2005 - 18:22 #11
aah.. jeg er med nu.. men jeg ser stadig ikke dit problem idet du stadig kan benytte Polygons metoder hvis du vil!
Avatar billede themepark Nybegynder
29. marts 2005 - 18:30 #12
Mit problem er at det eneste, jeg kan benytte, så vidt jeg kan se, er addPoint, og det bliver for besværligt, hvis jeg skal gøre det for samtlige punkter. Det med arrayet vil jo ikke virke, for hvordan skulle jeg så tilføje dem til min class i constructor metoden?
Avatar billede bromer Nybegynder
29. marts 2005 - 18:42 #13
Sådan her:

import java.awt.Polygon;

class poltest extends Polygon {

        public poltest(int[] x,int[] y,int npoints) {
                super(x,y,npoints);
        }

        public static void main(String[] args) {
        }
}
Avatar billede themepark Nybegynder
29. marts 2005 - 18:46 #14
Se, det virker jo fint, men giver mig så et andet problem, for jeg har en if sætning, som jeg er nødt til at gennemføre i min constructor, men super skal åbenbart være den første linje???
Avatar billede bromer Nybegynder
29. marts 2005 - 18:48 #15
Ja, altid.
Avatar billede themepark Nybegynder
29. marts 2005 - 18:51 #16
Er der så en anden måde at gøre det på end at bruge super?
Avatar billede bromer Nybegynder
29. marts 2005 - 18:57 #17
Den pæneste metode er at oprette en statisk metode hvori du kan lave nogle tests. Denne kan så retunere et nyt Polygon eller null som her:

import java.awt.Polygon;

class poltest extends Polygon {

        public poltest(int[] x,int[] y,int npoints) {
                super(x,y,npoints);
        }

        public static Polygon makePolygon(int[] x,int[] y, int npoints) {
                if (npoints > 0) {
                        return new Polygon(x,y,npoints);
                } else {
                        return null;
                }
        }

        public static void main(String[] args) {

        }
}

Du kan så bare ændre den if-sætning jeg har lavet.
Avatar billede bromer Nybegynder
29. marts 2005 - 19:02 #18
hvis du hellere vil have et poltest objekt istedet for et Polygon kan du bruge følgende:

import java.awt.Polygon;

class poltest extends Polygon {

        public poltest(int[] x,int[] y,int npoints) {
                super(x,y,npoints);
        }

        public static Polygon makePolygon(int[] x,int[] y, int npoints) {
                if (npoints > 0) {
                        return new poltest(x,y,npoints);
                } else {
                        return null;
                }
        }

        public static void main(String[] args) {

        }
}
Avatar billede arne_v Ekspert
29. marts 2005 - 19:11 #19
Sommetider kan man være lidt kreativ.

super skal være første kald, men:
  - du kan godt kalde super med expressions
  - du kan kalde statiske metoder

(fjollet) eksempel:

package march;

public class SuperTrick {
    public static void main(String[] args) {
        System.out.println(new C(true, 2));
    }
}

class P {
    private int v;
    public P(int v) {
        this.v = v;
    }
    public String toString() {
        return ("v=" + v);
    }
}

class C extends P
{
    public C(boolean add, int v) {
        super(add ? up(v) : down(v));
    }
    public static int up(int v) {
        return (v + 1);
    }
    public static int down(int v) {
        return (v - 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