Avatar billede themepark Nybegynder
28. april 2005 - 00:58 Der er 24 kommentarer

Returnering i constructor classes

Er det muligt at lave en constructor class, der rent faktisk returnerer noget? Jeg har nemlig min constructor, som jeg laver nogle udregninger på et array i, og så vil jeg gerne returnere dette array, til den variabel, som jeg har sat lig med min constructor.
Avatar billede kalp Novice
28. april 2005 - 01:19 #1
nej, men den kan evt. kalde en metode som så returnere noget.
Avatar billede themepark Nybegynder
28. april 2005 - 01:38 #2
Hmm...tjo...men hvordan ville jeg så få overført arrayet til min variabel?
Avatar billede kalp Novice
28. april 2005 - 01:44 #3
en construktor er der jo blot for at initialisere klassens attributter.. den har ingen retur værdig.

Jeg kan ikke helt kringle om det jeg sagde før kan lade sig gøre af den grund.
Så forestiller mig du skal lave et nyt kald efterfølgende til en metode.
Avatar billede themepark Nybegynder
28. april 2005 - 01:58 #4
Hmm...jeg er ikke helt med :S
Avatar billede mollevp Nybegynder
28. april 2005 - 02:13 #5
du skal lave noget ala.

int[] array;

Klasse klasseNavn = new Klasse();

array = klasseNavn.udregn();

hvor metoden udregn er public, returnere et int[] og ligger i Klasse
Avatar billede kalp Novice
28. april 2005 - 02:13 #6
themepark

Som jeg skriver kan og skal en konstruktør KUN initialisere klassens attributter... du bliver nød til at lave et metode kald efterfølgende.
Avatar billede themepark Nybegynder
28. april 2005 - 02:24 #7
Ja ja, men jeg var ikke helt med på hvad du mente med kaldet, jo
Avatar billede kalp Novice
28. april 2005 - 02:24 #8
En konstruktør ser sådan ud.

public klassenavn()
{

}

lig mærke til der faktisk står

public ->INGEN RETURVÆRDI<- klassenavn()
{

}

hvor en metode har en retur værdi

public String etEllerAndet()
{

}

eller hvis den ikke skal returnere noget

public void etEllerAndet()
{

}

Læs evt. disse 2 artikler

Om objekter
http://www.eksperten.dk/artikler/600
Om metoder
http://www.eksperten.dk/artikler/608
Avatar billede themepark Nybegynder
28. april 2005 - 02:50 #9
Rolig nu, jeg er ingen newbie, okay? Jeg ved godt hvordan en konstruktør ser ud ;) Hvad jeg ikke forstod var det med at kalde en ny metode, for du skulle jo stadig returnere arrayet via konstruktoren.
Avatar billede kalp Novice
28. april 2005 - 02:54 #10
men det kan du ikke.. du kan initialisere det i din konstruktør og hente det via. en metode efterfølgende.
Avatar billede kalp Novice
28. april 2005 - 02:55 #11
altså initialesere, udregne, færdige gøre det eller hvad du vil med det:)
Avatar billede themepark Nybegynder
28. april 2005 - 02:55 #12
Det du tænker på, er altså det som mollevp har skrevet kode til?
Avatar billede kalp Novice
28. april 2005 - 02:58 #13
næsten.. han laver dog hele udregningen i metoden... jeg ville blot lave en metode som returne array'et.

Dvs. udregne hvad der skal stå i array'et i din konstruktør.
Hente dit array via. en metode:)
Avatar billede themepark Nybegynder
28. april 2005 - 03:00 #14
array = klasseNavn.udregn();

Altså skulle den kun returnere arrayet, den udregn funktion?
Avatar billede kalp Novice
28. april 2005 - 03:03 #15
ja og så måske hedde noget andet.. fx hentArray() eller getArray()

metoden...

public Array hentArray()
{
return dinArray;
}

din konstruktør..

public dinklasse(parametre)
{
udform din array her ud fra parametrene..
husk på din array selvfølgelig skal være erklæret sammen med dine øvrige attributter så den ikke blot er midlertidig.
}

.. ved godt du ikke noop:) men gør vel ikke noget jeg forklare det sådan:))
Avatar billede themepark Nybegynder
28. april 2005 - 03:08 #16
Nej nej, det var bare alt det der med at forklare hvad en constructor var og sådan, det ved jeg jo godt ;) Hmm...I get it...så hedder arrayet i constructoren også bare ditArray :)
Avatar billede kalp Novice
28. april 2005 - 03:12 #17
præcis! din konstruktør skal selvfølgelig arbejde på det array du har erklæret sammen med din øvrige attributter øverst i klassen så den på den måde er tilgængelig for dine andre metoder.. bla. den nye der skal returnere det:)

ps. jeg ville ikke vise hvordan en konstruktør ser ud:) bare illustrere (tydelig gøre) at den ingen retur  værdi har:)

Det er derfor din lærer (hvis du studere) altid siger.. hvad er det for en metode? hvis du kalder den for det:) metoder har jo retur værdi'er.. det har konstruktøre ikke.
Avatar billede themepark Nybegynder
28. april 2005 - 03:16 #18
Javist studerer jeg, var der bare ikke til Java timerne ;)
Avatar billede jakoba Nybegynder
28. april 2005 - 08:40 #19
du kan evt 'snyde' og gøre det indirekte:

int[] array = int[lengde];        // bemærk længden skal angives her

KlasseNavn klas = new KlasseNavn( array );
                                  // constructoren kan så fylde værdier i det array

men det kan ikke anbefales. det udfylder arrayet med en sideeffek, og i programmering er det som oftest en måde at skyde sig selv i foden med uoverskuelig kode.

Så tag et kik på hvorfor du synes din konstruktor absolut skal returnere noget. kunne det være det i virkeligheden er det der array der er placeret forkert og burde ligge indeni den der klasse ?

mvh JakobA
Avatar billede snoop_one Nybegynder
29. april 2005 - 00:42 #20
Nu kender jeg selvfølgelig ikke applikationen, men meget tyder på at du faktisk ikke har brug for din konstruktor...
Du kunne lave en statisk metode i din klasse - ville det måske hjælpe?
f.eks.:
int[] array = Klasse.udregn(input args...);

Noget tyder på, at din tankegang er fra "struktureret programmering" og ikke så meget i ånd med OOP.
Normalt når man benytter en konstruktor, er jo fordi at objektet skal befinde sig en en gyldig tilstand når det bliver oprettet - hvorefter man kan manipulere det gennem metode kald.

Og for at få, alt på det rene så returnere din konstruktor allerede noget... du har bare ikke muligheden for, explicit, at definere hvad den skal returnere.
Den vil altid returnere en instans af din klasse!

Håber ikke, at det hele er sort snak ;0)
Avatar billede themepark Nybegynder
30. april 2005 - 17:53 #21
Hmm...det vil vel sige, at jeg enten kan vælge at tildele min constructor til mit array (med new), hvor der så i constructoren bliver kaldt en metode, der returnerer det jeg har regnet på, ELLER jeg kan nøjes med at kalde funktionen med det samme, og så lade være med at bruge en konstruktor...korrekt?
Avatar billede snoop_one Nybegynder
30. april 2005 - 19:22 #22
Det ser ud til at du har misforstået argument passing i metoder i Java. Eftersom dit svar til kalp's første indlæg er :"Hmm...tjo...men hvordan ville jeg så få overført arrayet til min variabel?"

Det er netop dit variabel udregningerne bliver udført på - fordi Java køre med argumenter som referencer og ikke som kopier.
Et lille eksempel:

public class Test {
   
    public static void main(String... args){
        int[] myArray = new int[3];
        Test.printArray(myArray);
        Test.beregn(myArray);
        Test.printArray(myArray);
        new Test().beregn2(myArray);
        Test.printArray(myArray);
       
    }
    public Test(){
    }
   
    public static void beregn(int[] args){
        args[0] = 3;
        args[1] = 3;
        args[2] = 3;
    }
   
    public void beregn2(int[] args){
        args[0] = 1;
        args[1] = 1;
        args[2] = 1;
    }
    public static void printArray(int[] array){
        System.out.print("[ ");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+ " ");
        }
        System.out.println("]");
    }
}
Som du kan se så bliver variablen myArray aldrig tildelt nogen værdi igen!
Dette eksempel var kun for illustration, og er meget enig med jakoba med at det er, at skyde sig selv (og andre) i foden (og/eller i hovedet) ;0)

Du kan overvejer at lave kald på følgende måde:
myArray = Klasse.Udregn(array); //static
eller,
myArray = new Klasse().Udregn(array); //non-static
Avatar billede jakoba Nybegynder
30. april 2005 - 22:33 #23
eller bare lave en metode der returnerer det ønskede array:

int[] metodeNavn( int lengde, int indhold ) {
    int[] resultat = new int[lengde];
    for ( int i=0; i < lengde; i++ ) {
        resultat[i] = indhold;        // eller hvad du nu vil udfylde med.
    }
    return resultat;
}
Avatar billede kalp Novice
30. september 2005 - 11:54 #24
themepark?
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