Just nu i M3-nätverket
Jump to content

till kalla en klass från sig själv


Ken Q

Recommended Posts

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

 

 

Link to comment
Share on other sites

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?

 

Link to comment
Share on other sites

Öh....va?

 

Vaddå "stänga" en klass?

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

 

/F

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...