Toon posts:

[java] Code helpen doorlopen

Pagina: 1
Acties:
  • 37 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo,
Wie kan mij helpen met het logisch doorlopen van de onderstaande java code bij het instantiëren van object d met de volgende statements:

Dimension d = new Division(); //instantie van het type Division
d.tool_1(20, 2);
en
d.tool_2(20, 20);
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Division {

   public void tool_1 (int x, int n){
        if (n<=x){
         while (x%n != 0) n=n+1;
         System.out.println(n);
         tool_1 (x/n, n);
        } else return;
   }

   public void tool_2 (int x, int n) {
        if (n>1){
         if (x%n==0) System.out.println(n);
         tool_2(x,n-1);
        } else return;
   }
}

Ik weet dat het iets te maken heeft met het ontbinden in factoren en het vinden van delers, maar ik weet niet hoe ik precies de code moet DOORLOPEN. Wie kan me helpen? (rekening houdend met mijn obvious brakke programmeervaardigheden ;) )

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

plak er eerst ff [ code ] [/ code] tags omheen, zodat we het iets beter kunnen lezen. (dan zonder die extra spaties).

Verwijderd

Topicstarter
d.tool_2(20, 20); snap ik volgens mij wel. Met deze functie worden de mogelijke delers van x bepaald. Dus 20, 10, 5, 4 en 2.

Nu d.tool_1(20, 2); nog....

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Het komt ook omdat dit denk ik wel het slechte stukje java code is wat ik ooit heb gezien. Totaal niets zeggende methode namen, en dan ook nog eens een pokke layout.

Die else return die kan je verwijderen, en je moet eigelijk geen statements achter een if zetten. Maar ik zou het als volgt doen.
code:
1
2
3
4
5
6
while(x%d!=0)
   n=n+1; //n++

ipv

while(x%d!=0) n=n+1;

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Schrijf dan eens op papier uit wat er gebeurt.
Elke stap van de methode, zo complex zijn ze niet dat je dat niet op 1 a4tje kwijt kan...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

De eerste is trouwens ontbinden in factoren.
Mag je zelf uitzoeken waarom :P

Verwijderd

Topicstarter
Op maandag 15 juli 2002 16:37 schreef Alarmnummer het volgende:
Het komt ook omdat dit denk ik wel het slechte stukje java code is wat ik ooit heb gezien. Totaal niets zeggende methode namen, en dan ook nog eens een pokke layout.
Haha, ik zal het tegen m'n docent zeggen! :) Het is namelijk een vraag uit een proeftentamen java. 8-) Wellicht heeft hij de code expres brak gemaakt.

Maar hoe moet ik 'm precies doorlopen, zonder de code aan te passen? Vooral dit stukje:
code:
1
while (x%n != 0) n=n+1;

Hier eindigt toch gelijk het verhaal ( 0 != 0) :?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

't is mij ook niet duidelijk waarom Dimension d een instantie mag zijn van het type Division :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Beide methodes zijn tail-recursive, en dus makkelijk om te schrijven naar een iteratieve versie. Die iteratieve versie doorlopen zal geen probleem zijn hoop ik...
code:
1
2
3
4
5
6
7
public void tool_1 (int x, int n){
  while (n<=x){
    while (x%n != 0) ++n;
    System.out.println(n);
    x/= n;
  }
}

De tool_2() moet nu zelf lukken...

Verwijderd

Topicstarter
Ja, maar bij het invullen van x=20 en n=2 eindigt bij:
code:
1
while (x%n != 0) ++n;

toch gelijk het hele verhaal?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 15 juli 2002 17:01 schreef Dictionar het volgende:
Ja, maar bij het invullen van x=20 en n=2 eindigt bij:
code:
1
while (x%n != 0) ++n;

toch gelijk het hele verhaal?
Klopt :)

Daar moet nog een extra while omheen die checkt op X > N

Verwijderd

Topicstarter
Oke oke oke, maar wat is nou de uitkomst van de Originele functie? Ik denk dat ik niet helemaal jofel nadenk ofzo, want ik kom er nog steeds niet uit.

Kan iemand een voorbeeldje geven met ingevulde variabelen x=20 en n=2?

Ik weet nu wel dat het ontbinden in factoren is, namelijk 2, 2 en 5. Maar ik krijg deze resultaten niet bij het doorlopen van de code... :(

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Dan plaats je toch overal even println`s bij?

Verwijderd

Topicstarter
Op maandag 15 juli 2002 17:15 schreef Alarmnummer het volgende:
Dan plaats je toch overal even println`s bij?
Ja, maar ik bedoel in theorie. Dus zonder het programma uit te voeren.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 15 juli 2002 17:16 schreef Dictionar het volgende:
Ja, maar ik bedoel in theorie. Dus zonder het programma uit te voeren.
Uitschrijven op papier wat er allemaal gebeurt :)
Dus de aanroepen, wat er geprint wordt, de whileloops etc etc.

Is wat veel werk, maar je komt er wel goed achter dan.

Verwijderd

Topicstarter
Op maandag 15 juli 2002 17:34 schreef ACM het volgende:

[..]

Uitschrijven op papier wat er allemaal gebeurt :)
Dus de aanroepen, wat er geprint wordt, de whileloops etc etc.

Is wat veel werk, maar je komt er wel goed achter dan.
Ja, maar als ik voor x=20 en voor n=2 invul, dan kom ik bij de regel while(x%n != 0) n=n+1;
Dan krijg ik volgens mij 20%2 != 0, dus 0 =! 0. Dat klopt niet, dus daar zal wel mijn denkfout liggen. Ik weet niet goed hoe ik de variabelen in moet vullen.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op maandag 15 juli 2002 17:38 schreef Dictionar het volgende:

[..]

Ja, maar als ik voor x=20 en voor n=2 invul, dan kom ik bij de regel while(x%n != 0) n=n+1;
Dan krijg ik volgens mij 20%2 != 0, dus 0 =! 0. Dat klopt niet, dus daar zal wel mijn denkfout liggen. Ik weet niet goed hoe ik de variabelen in moet vullen.
20%2 == 20 mod 2 =>0

dus 20%2 is 0 want er blijft tenslotte niets over.

[edit] oeps.. ik was ff te snel :D

Daar staat
while (20%2!=0)
while (0!=0)
while(false)
je komt dus niet 1 keer in die while loop terecht.

Verwijderd

Topicstarter
Ha ik snap 'm al! :) Ik zat met die while als voorwaarde voor het verder doorlopen van de code. Dat hoeft natuurlijk helemaal niet |:(

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op maandag 15 juli 2002 17:44 schreef Dictionar het volgende:
Ha ik snap 'm al! :) Ik zat met die while als voorwaarde voor het verder doorlopen van de code. Dat hoeft natuurlijk helemaal niet |:(
Het komt ook een beetje omdat je een rotlayout gebruikt. In java is het vrij ongebruikelijk om een if/while statement volledig op 1 regel te schrijven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Division{
    public void tool_1(int x, int n){
      if(n<=0){
         while(x%n!=0){
           n++;
         } 
         System.out...
         tool_1(x/n,n);
      }
    }

    ...
}

Verwijderd

Topicstarter
Toch nog een probleempje.. :o :o

Ik kom tot de 1e keer n=2, de 2e keer n=2 en dan wordt het
code:
1
2
while (5%2 != 0) n=3
System.out.println(3);

Dat klopt toch niet, want de factoren van 20 moeten 2, 2 en 5 zijn :?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 15 juli 2002 18:08 schreef Dictionar het volgende:
Toch nog een probleempje.. :o :o

Ik kom tot de 1e keer n=2, de 2e keer n=2 en dan wordt het
code:
1
2
while (5%2 != 0) n=3
System.out.println(3);

Dat klopt toch niet, want de factoren van 20 moeten 2, 2 en 5 zijn :?
Die 3 drukt ie ook niet af.

Bekijk de while zoals alarmnummer hem geschreven heeft.
En ik sta op het punt je thread te sluiten, want je begint wel heel erg basic programmeerdingen te vragen nu.

Verwijderd

/me zucht
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tool_1(20, 2)

 x     n    BP
20     2    n <= x
20     2    x % n == 0
20     2    System.out.println(n)
10     2    x/= n
10     2    n <= x
10     2    x % n == 0
10     2    System.out.println(n)
 5     2    x/= n
 5     2    n <= x
 5     2    x % n != 0
 5     3    ++n
 5     3    x % n != 0
 5     4    ++n
 5     4    x % n != 0
 5     5    ++n
 5     5    x % n == 0
 5     5    System.out.println(n)
 1     5    x/= n
 1     5    n > x

<edit>Helemaal compleet gemaakt, en nu dicht :)</edit>

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

zie mietje :)
Pagina: 1

Dit topic is gesloten.