Just nu i M3-nätverket
Gå till innehåll

till kalla en klass från sig själv


Ken Q

Rekommendera Poster

Tjena..

Jag håller vill tillkalla en klass från sig själv så de blir som en loop.. Det som händer när jag gör det är att den efter ett tag knasar sig vilket den borde göra eftersom jag aldrig "stänger" klasserna jag tidigare öppnat..

Finns det något jag kan göra för att "stänga" dem jag tidigare öppnat?.. jag har hittat en metod som heter dispose, men jag får inte den å funka.. har någon lust å hjälpa mej?

mvh Patrik

 

 

Länk till kommentar
Dela på andra webbplatser

Ett kodexempel skulle göra saken lite klarare!

 

Anropar du en metod rekursivt? Eller vad menar du med att tillkalla sig själv/öppna en klass?

 

Länk till kommentar
Dela på andra webbplatser

Öh....va?

 

Vaddå "stänga" en klass?

Pratar du om (av)definiering av klasser med ClassLoader eller om att radera objekt?

 

/F

 

Länk till kommentar
Dela på andra webbplatser

Precis.. rekursivprogarmmering e precis vad jag menar.. kom bara inte på ordet.. och med "stänga" menade jag givetvis avdefiniera..

 

public class hej

{

public static void hejsan()

{

hej i = new hej();

hejsan();

}

}

 

kör jag detta så får jag ett stackoverflowerror.. vilket jag borde få, men jag vet inte hur jag löser de..

 

Länk till kommentar
Dela på andra webbplatser

Vad är tanken med programmet?

 

Du skapar en ny instans av klassen hej men anropar aldrig någon metod på det objektet utan anropar dig själv.

 

På något vis måste du ha ett villkor som avbryter det rekursiva beteendet, t ex:

 

public class hej
{
 public void hejsan(int i)
 {
   if(i < 10)
   {
     hej i = new hej();
     i.hejsan(i+1);
   }
 }
}

 

Och på nåt annat ställe:

 

...
new hej().hejsan(0);
...

 

Länk till kommentar
Dela på andra webbplatser

jag vill att användaren själv ska avbryta det rekursiva beteendet t ex om han skriver in en 5:a så avbryts den, men om användaren aldrig skriver in en 5:a så ska flödet kunna fortsätta hur länge som helst, därför vill jag frigöra minnet så den kan fortsätta om det behövs..

 

Länk till kommentar
Dela på andra webbplatser

Men varför vill du göra det rekursivt? Det verkar vara ett "dumt" sätt att göra det på. Fortsätter det tillräckligt länge så blir det stack overflow för eller senare.

 

Gör en loop istälelt:

 

...
while(x != 5 )
{
 ...
}

 

Den loopen kan fortsätta i öändlighet utan problem.

 

Länk till kommentar
Dela på andra webbplatser

att man kan göra en loop vet jag.. jag sitter bara och provar lite.. håller fullständigt me dej om att det verkar "dumt" och onödigt.. vill bara veta om det går att göra så egentligen..

 

Länk till kommentar
Dela på andra webbplatser

Så:

 

public class hej
{
public void hejsan()
{
int i = getInput();
if(i != 10)
{
 hejsan();
}
}

 

Eller så:

 

public class hej
{
public void hejsan()
{
int i = getInput();
if(i != 10)
{
 hej h = new hej();
 h.hejsan();
}
}

 

getInput() är den metod som hämtar indata från användaren (hur du nu vill göra det).

 

Länk till kommentar
Dela på andra webbplatser

Njaä, det kan man inte, tror jag...

Oavsett hur du vrider och vänder på det, vid en viss stacknivå så får du StackOverflowError... För oändlig loopning går det inte med rekursion, såvida inte du gör mysko habrovinklar som följande:

 

public static void hej(int depth)
   {
       System.out.println(depth);
       try
       {
           hej( depth +1 );
       }
       catch (StackOverflowError e)
       {
           if (depth > 1)
           {
               throw e;
           }            
           hej(0);
       }
   }

 

När jag anropar hej(0) den skriver den ut siffrorna 0 till 7360, och sedan börjar den om på 0 igen. Men det är inte direkt någon lysande idé...

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...