[JAVA] ksnap het niet meer

Pagina: 1
Acties:

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
ik heb 2 rijen=arrays. Als een getal wat in rij1 voorkomt niet in rij2 zit, dan moet dat getal toegevoegd worden aan rij3. de methodes kloppen, want die heb ik al gecontroleerd. hij voegt nu telkens niets toe, terwijl het volgens mij moet kloppen.
ziet iemand wat ik fout doe? waarschijnlijk is het iets onzinnigs, maar ik kom er niet uit.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
        for(int i1=0;i1<rij1.getGrootte();i1+=1){
            gevonden=false;
            getal=rij1.getGetalOp(i1);

            for(int i2=0;i2<rij2.getGrootte();i2+=1)
                if(rij1.getGetalOp(i1)==rij2.getGetalOp(i2))
                    gevonden=true;
            
            if(gevonden=false)
                rij3.voegToe(rij1.getGetalOp(i1));

        }
        System.out.println(rij3.toString());

Multimonitor is relax :P


  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 08:15

LauPro

Prof Mierenneuke®

Volgens mij ben je een flink aantal accolades vergeten :?

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
als je maar 1 opdracht hebt na een for, if oid dan hoef je geen accolade te gebruiken

Multimonitor is relax :P


  • Marcj
  • Registratie: November 2000
  • Nu online
LauPro schreef op 30 september 2002 @ 12:41:
Volgens mij ben je een flink aantal accolades vergeten :?
Maar één paar hoor, rond de for-lus ;)
MeIsTwisted schreef op 30 september 2002 @ 12:42:
als je maar 1 opdracht hebt na een for, if oid dan hoef je geen accolade te gebruiken
Maar je hebt er twee, namelijk de if-statement + de inhoud (van één statement).

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
toch doet ie met en zonder hetzelfde

Multimonitor is relax :P


  • Marcj
  • Registratie: November 2000
  • Nu online
Hoe heb je rij1 en rij2 gedeclareerd? Met een zelfgemaakte klasse of gewoon een array?

Want weet je wel zeker dan getGrootte() en getGetalOp() wel goed werken?

Verwijderd

Volgens mij heb je een aantal fouten gemaakt. Teneerste:
Dit stukje snap ik niet: i1+=1
Volgens mij moet dit i1=i1++ of i1=i1+1 zijn! Hetzelfde geldt voor de tweede for-loop!
Een rij is een referentie naar een object en volgens mij kun je e value van objecten niet vergelijken met een == operator. Dit moet je dacht ik met een equals object doen. Weet alleen niet echt hoe dit moet :? Ben nog maar beginneling bij UTwente INF.
Ik weet niet of jij mij moet geloven! 8) Ben ook maar een beginneling! hehe
Mzzl en succes!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(int i=0; i < rij1.getGrootte(); i++)
{
    gevonden=false;
    getal=rij1.getGetalOp(i);

    for(int j=0; j < rij2.getGrootte(); j++)
    {
        if(rij1.getGetalOp(i) == rij2.getGetalOp(j))
            gevonden=true;
    }
    if(gevonden=false)
        rij3.voegToe(rij1.getGetalOp(i));

}
System.out.println(rij3.toString());

Heb jij nu staan :)
Zou idd goed moeten werken, hooguit omdat je voegToe of getGetalOp niet goed werken, plaats er es strategisch wat println's tussen die de waardes die vergeleken worden en toevoegingen etc laten zien

Owja, kijk es naar die 2e if, moet dat geen == zijn? :P

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 30 september 2002 @ 12:46:
Volgens mij heb je een aantal fouten gemaakt. Teneerste:
Dit stukje snap ik niet: i1+=1
Volgens mij moet dit i1=i1++ of i1=i1+1 zijn! Hetzelfde geldt voor de tweede for-loop!
Een rij is een referentie naar een object en volgens mij kun je e value van objecten niet vergelijken met een == operator. Dit moet je dacht ik met een equals object doen. Weet alleen niet echt hoe dit moet :? Ben nog maar beginneling bij UTwente INF.
Ik weet niet of jij mij moet geloven! 8) Ben ook maar een beginneling! hehe
Mzzl en succes!

Ik geloof dat jij het een beetje fout hebt :)
(i++) = (i += 1) = (i = i + 1)

Als er uit die getGetalOp primitieven rollen is er ook geen probleem met de == operator.

[ Voor 1% gewijzigd door F_J_K op 09-06-2007 17:27 ]


  • Marcj
  • Registratie: November 2000
  • Nu online
Verwijderd schreef op 30 september 2002 @ 12:46:
Volgens mij heb je een aantal fouten gemaakt. Teneerste:
Dit stukje snap ik niet: i1+=1
Volgens mij moet dit i1=i1++ of i1=i1+1 zijn! Hetzelfde geldt voor de tweede for-loop!
Een rij is een referentie naar een object en volgens mij kun je e value van objecten niet vergelijken met een == operator. Dit moet je dacht ik met een equals object doen. Weet alleen niet echt hoe dit moet :? Ben nog maar beginneling bij UTwente INF.
Ik weet niet of jij mij moet geloven! 8) Ben ook maar een beginneling! hehe
Mzzl en succes!
Punt1: i1+=1 is het zelfde als i1++ :)
Punt2: hij vraagt een getal uit een array, en die vergelijkt hij met i++ (ga er van uit dat hij standaard dingen in die array stopt)

Punt3: hoe heet je dan? ben ook 1e jaars UTwente INF studen :P

edit: grr ACM :(

[ Voor 1% gewijzigd door F_J_K op 09-06-2007 17:27 ]


  • _H_G_
  • Registratie: September 2002
  • Laatst online: 07:50
De variabele 'getal' zit er voor de gein bij?

Anyway, gevonden==false.

gevonden=false is altijd false

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
_H_G_ schreef op 30 september 2002 @ 12:49:
De variabele 'getal' zit er voor de gein bij?

Anyway, gevonden==false.

gevonden=false is altijd false
jah, die stond er nog, maar kan idd weg

Multimonitor is relax :P


  • Marcj
  • Registratie: November 2000
  • Nu online
Ben nou eig toch benieuwd of hij ook werkt zonder die accolades in die for-lus?

Verwijderd

sorry wist niet dat dat hetzelfde was! 8)7 Zei ook al denk dat je mij niet moet geloven! :D Ik heet btw Robert. hehe

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
Java:
1
2
3
4
5
6
7
8
9
10
11
12
for(int i=0; i < rij1.getGrootte(); i++){
    gevonden=false;

    for(int j=0; j < rij2.getGrootte(); j++){
        if(rij1.getGetalOp(i) == rij2.getGetalOp(j))
            gevonden=true;
    }
    if(gevonden==false)
        rij3.voegToe(rij1.getGetalOp(i));

}
System.out.println(rij3.toString());


nu doet ie het wel. if(gevonden==false) moest het zijn. :?

Multimonitor is relax :P


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

Alarmnummer

-= Tja =-

Waarom gebruik je eigelijk for lussen ipv while lussen? En waarom maak je er niet een aparte functie : zitGetalInRij (je mag dan wel je forlussen hanteren met een enter). En verder mag je ook gewoon if(!gevonden) schrijven ipv if(gevonden==false).

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
kvond dit makkelijker

Multimonitor is relax :P


Verwijderd

Klopt! Want if(gevonden=false) evalueert nooit naar true, dus hij voert dan nooit dat if-statement uit.

PS. Nou we toch bezig zijn, ben 3e jaars UTwente INF ;)

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

Alarmnummer

-= Tja =-

Het is wel ongelovelijk lelijke code en een docent zou dit ook moeten afkeuren. Je loopt onnodig door lussen heen en je kan uit je code niet in 1e instantie opmaken wat je er mee bedoelt.

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
toch mochten we geen extra functies maken.
dus het moest wel zo

Multimonitor is relax :P


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

Alarmnummer

-= Tja =-

Dat is onzin. Ik durf te wedden dat je docent niet heeft gezegd dat je geen extra functies mocht maken.

Verwijderd

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(int i=0; i < rij1.getGrootte(); i++){
    gevonden=false;

    for(int j=0; j < rij2.getGrootte(); j++){
        if(rij1.getGetalOp(i) == rij2.getGetalOp(j))
        {
            gevonden=true;
            break; // <======= 
        }
    }
    if(gevonden==false)
        rij3.voegToe(rij1.getGetalOp(i));

}
System.out.println(rij3.toString());


Dat breakje kan aardig wat performance schelen. Als je het getal al gevonden hebt, hoef je de rest van de rij natuurlijk niet meer te vergelijken...

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

Alarmnummer

-= Tja =-

je zou eventueel ook een label en een goto statement kunnen gebruiken.

Verwijderd

Verwijderd schreef op 30 september 2002 @ 17:16:

Dat breakje kan aardig wat performance schelen. Als je het getal al gevonden hebt, hoef je de rest van de rij natuurlijk niet meer te vergelijken...
Waarom dan niet de break en de extra variablele verwijderen?
Dit ziet er toch veel simpeler uit.
Java:
1
2
3
4
5
6
7
8
9
10
11
int n = rij2.getGrootte();
for(int i=0; i < rij1.getGrootte(); i++){
    for(int j=0; j < n;j++){
        if(rij1.getGetalOp(i) == rij2.getGetalOp(j))
       {
            j := n;
            rij3.voegToe(rij1.getGetalOp(i));
       }
    }
}
System.out.println(rij3.toString());

edit:
Ik loop weer eens te slapen hoor, er klopt hier natuurlijk weer niks van

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

Alarmnummer

-= Tja =-

Verwijderd schreef op 30 september 2002 @ 18:08:
[...]

Waarom dan niet de break en de extra variablele verwijderen?
Dit ziet er toch veel simpeler uit.
Java:
1
2
3
4
5
6
7
8
    for(int j=0; j < n;j++){
        if(rij1.getGetalOp(i) == rij2.getGetalOp(j))
       {
            j := n;
            rij3.voegToe(rij1.getGetalOp(i));
       }
    }
}
Dit is inderdaad nog een betere oplossing dan mijn label en goto statement.

Verwijderd

Hij moet elementen toevoegen die niet in beide arrays voorkomen. De code van borganism doet exact het tegenovergestelde...

  • VinnieM
  • Registratie: September 1999
  • Laatst online: 29-11-2024
Alarmnummer schreef op 30 september 2002 @ 17:21:
je zou eventueel ook een label en een goto statement kunnen gebruiken.
Het goto statement werkt/bestaat toch niet in Java?

  • CodeVision
  • Registratie: Juni 2002
  • Laatst online: 03-08 20:29
goto bestaat nog wel als keyword, maar het doet idd niets, ik neem aan dat alarmnummer gewoon labels in samenwerking met break en continue bedoelde ;)

"I do not fear computers, I fear lack of them"


  • Marcj
  • Registratie: November 2000
  • Nu online
Als we het dan toch netjes gingen doen zou ik een while-loop gebruiken ipv een for-loop:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int rij1Grootte = rij1.getGrootte();
int rij2Grootte = rij2.getGrootte();
for(int i = 0; i < rij1Grootte ; i++){
   boolean gevonden=false;
   getal = rij1.getGetalOp(i);

   int j = 0;
   while(j < rij2Grootte && !gevonden)
   {
      gevonden = rij1.getGetalOp(i)==rij2.getGetalOp(j);
      j++;
   }

   if(!gevonden)
      rij3.voegToe(rij1.getGetalOp(i));
}
System.out.println(rij3.toString());


edit:
En persoonlijk zou ik liever i en j gebruiken ipv i1 en i2. Maar dat heeft meer met smaak te maken denk ik.

edit2:
Of dit is ook een leuke oplossing :P weet niet of jouw leraar een lege while-loop kan waarderen :)

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
int rij1Grootte = rij1.getGrootte();
int rij2Grootte = rij2.getGrootte();
for(int i = 0; i < rij1Grootte ; i++){
   boolean gevonden=false;
   getal = rij1.getGetalOp(i);

   int j = 0;
   while(j++ < rij2Grootte && !(gevonden = rij1.getGetalOp(i)==rij2.getGetalOp(j))) {}

   if(!gevonden)
      rij3.voegToe(rij1.getGetalOp(i));
}
System.out.println(rij3.toString());
Pagina: 1