Archief - Hulp gevraagd programmeren in JAVA NetBeans

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Bardock

Legacy Member
Beste 9livers,

allereerst mijn excuses als ik de zoekfunctie niet heb gebruiken, maar ik zit onder de stress door het vak programmeren.

Nu ja het zit zo, sinds dit semester volg ik programmeren & datastructren als keuzevak op UA en we zijn verplicht om elke week oefeningen te maken, maar we hebben zelfs geen boek. Deze week kregen we als opdracht om een programma te schrijven.

Drie methodes + iteraties( for, while, do,...);
1) main methode
2) even getallen afdrukken die kleiner zijn 50 (via System.out.println() )
3) bepaald even of oneven via TRUE or FALSE

We mogen geen waarden/getallen toekennen aan variabelen, maar we moeten ze zelf genereren via IDE.

Dit is ongeveer wat ik zelf heb "gecodeerd".

--------------------------------------------------------------------------------------------------


public class GeneratePrint {

public static void main(String[] args) {
int ondergrens = 0;
int bovengrens = 100;
int getal2;
drukEvenGetallen(ondergrens, bovengrens);
}

private static boolean controleerEvenGetal(((int)(Math.random()*100) % 2) == 0) {
boolean even;
if (((int)(Math.random()*100) % 2) == 0) {
even = true;
} else {
even = false;
}
return even;
}

private static void drukEvenGetallen(int ondergrens, int bovengrens){
System.out.println("Genereer random getallen tussen 0 en 100:");
boolean even;
for (int i = 0; i < 10; i++) {
while(ondergrens <= bovengrens){
even = controleerEvenGetal(ondergrens);
}
if(((int)(Math.random()*100) % 2) == 0 == getal2){
System.out.println("Random getal [" + (i + 1) + "] : " + (int) (Math.random() * 100));
}
}

}
}
--------------------------------------------------------------------------------------------------

En het is enkel bij dat vetgedrukt dat er een probleem is en als ik eenvoudige variabele gebruik, krijg ik altijd de waarde '0' TRUE en/of FALSE.

Ik dacht dat misschien tof zijn zou om dat vak eens te volgen, maar dat valt serieus tegen. En ja, we hebben geen cursus, niets van nota's, geen boeken, en die malloot van dien prof plaats ook niets op Blackboard.

Sorry voor mijn zinsbouw, spelling, schrijffouten, .... maar op dit moment wil ik weten hoe ik verder geraak. Ik heb bijna een hele dag aangezeten :(


Dank bij voorbaat

SharkyXTS

Legacy Member
Ik vermoed dat er bij het kopieren/plakken iets verkeerd is gegaan want het bovenstaande komt
nog niet in de buurt van iets compileerbaars :).

Mss dat je toch eens moet uitleggen wat je precies wil doen, want afgaande op je
code heb ik een vermoeden dat je het zelf niet goed weet:

Code:
for ( int i = 0; i < 10; i++ ) {
      while ( ondergrens <= bovengrens ) {
        even = controleerEvenGetal( ondergrens );
      }
      if ( ( ( int ) ( Math.random() * 100 ) % 2 ) == 0 == getal2 ) {
        System.out.println( "Random getal [" + ( i + 1 ) + "] : " + ( int ) ( Math.random() * 100 ) );
      }
    }

In bovenstaande stukje code wil je waarschijnlijk tien keer een willekeurig getal genereren
in het interval [ondergrens, bovengrens]. Vervolgens nagaan of dat getal kleiner is dan 50
en dit dan afprinten.

In dat geval zal je eerder iets als het volgende willen:
Code:
private static void drukEvenGetallen( int ondergrens, int bovengrens ) {
    for ( int i = 0; i < 10; i++ ) {
      int getal = genereerGetal( ondergrens, bovengrens );
      if ( isEven( getal ) ) {
        System.out.println( getal );
      }
    }
  }

ultddave

Legacy Member
Niet slecht bedoelt, maar ik heb de indruk dat je niet echt goed snapt wat je geschreven code precies doet.

PS: Als je de programmacode tussen "CODE" tags plaatst op het forum hier, dan is de uitlijning beter:
Code:
public class IterationsOpdracht2 
{
 
	public static void main(String[] args) 
	{
		 int ondergrens = 0;
		 int bovengrens = 100;
		 int getal2;
		 drukEvenGetallen(ondergrens, bovengrens);
	}
	 
	private static boolean controleerEvenGetal(((int)(Math.random()*100) % 2) == 0) 
	{
		 boolean even;
		 if (((int)(Math.random()*100) % 2) == 0) {
		 even = true;
		 } else {
		 even = false;
		 }
		 return even;
	}
	 
	private static void drukEvenGetallen(int ondergrens, int bovengrens)
	{
		 System.out.println("Genereer random getallen tussen 0 en 100:");
		 boolean even;
		 for (int i = 0; i < 10; i++) 
		 { 
			while(ondergrens <= bovengrens)
				even = controleerEvenGetal(ondergrens);
			if(((int)(Math.random()*100) % 2) == 0 == getal2)
				System.out.println("Random getal [" + (i + 1) + "] : " + (int) (Math.random() * 100));
		 }
	}
}

Ik heb momenteel wat tijd teveel, so here we go ^^:
Code:
	public static void main(String[] args) 
	{
		 int ondergrens = 0;
		 int bovengrens = 100;
		 int getal2;
		 drukEvenGetallen(ondergrens, bovengrens);
	}
Hier ga je een ondergrens en bovengrens definieren. De bedoeling is dat je getallen gaat genereren met een waarde tussen "ondergrens" en "bovengrens". Hiervoor ga je, zoals je ook correct doet, de variabelen meegeven als parameter aan de "drukEvenGetallen" functie.

PS: Die getal2 variabele staat gedefinieerd in de functie "main" en is dus enkel daar beschikbaar. Die is dus nutteloos op die plaats. Vandaar dat Netbeans die waarschijnlijk ook oranje zal onderlijnen als "unused variable".

Maar dan gaat het fout. In de eerste plaats gebruik je die 'ondergrens' en 'bovengrens' variabelen nergens meer. Die worden meegegeven naar elke functie, maar er gebeurt niets mee.

Als je in java een (pseudo-)willekeurig getal wilt genereren tussen "ondergrens" en "bovengrens" kan je de Math.random() functie inderdaad gebruiken. Maar je moet hier rekening mee houden:
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. Returned values are chosen pseudorandomly with (approximately) uniform distribution from that range.
Met andere woorden, de Math.random() functie returned enkel de waarden tussen 0.0 (INCLUSIEF) en 1.0 (EXCLUSIEF). Dit zorgt dus voor problemen als je wilt dat het getal 100, zelf, ook gegeneerd kan worden.

Daarenboven kan de ondergrens bijvoorbeeld 20 zijn (als je tussen 20 en 100 wilt gaan genereren). Dus dan moet je dat zo doen:
Code:
// Veronderstelling: Bovengrens > ondergrens
int difference = bovengrens - ondergrens + 1;    
int getal = (int) ((Math.random() * difference) + ondergrens));
Stel dat de Math.random() nu 0.999999999999999... genereert, dan krijg je dus (int) (0.999999999999999... * 101) + 0
Wat dus "(int) 100.9999999999..." is, dus 100 (cast naar int, geen afronding).

PS: Ook is het mogelijk om de java.util.Random klasse te gebruiken, die heeft een "nextInt" methode die je ook kan helpen.

De rest van de code doet ook niet echt wat het moet doen, voor het genereren van die getallen kan je kijken naar de post hierboven van Sharky.

Voor te kijken of iets even/oneven is:

Code:
public static boolean isEvent(int getal)
{
      if(getal % 2 == 0) // Is het getal deelbaar door 2 zonder rest?
          return true;
      else
          return false;
}

Of korter:
Code:
public static boolean isEvent(int getal)
{
      return (getal % 2 == 0);
}

PS: Als je een if- of else-test hebt waarbij maar 1 statement uitgevoerd moet worden, dan moet je geen accolades plaatsen.

Dus:
Code:
if(getal % 2 == 0) {
   return true;
}
Is hetzelfde als:
Code:
if(getal % 2 == 0)
   return true;
Enkel als je meerdere regels wilt uitvoeren zijn die accolades nodig:
Code:
if(getal % 2 == 0) {
  System.out.println("Dit is een even getal, yaaay!");
  return true;
}

Succes.

dJeez

Legacy Member
Je zondigt alvast tegen We mogen geen waarden/getallen toekennen aan variabelen, maar we moeten ze zelf genereren via IDE., en verder doe je ook niet wat er in de opdracht staat (ofwel heb je ze niet correct ingegeven). Waar wordt daar ergens melding gemaakt van het gebruik van random getallen? Ik denk dat je beter eens met een medestudent de opdracht uitklaart, want volgens mij heb je die niet goed begrepen.

Bardock

Legacy Member
dJeez zei:
Je zondigt alvast tegen We mogen geen waarden/getallen toekennen aan variabelen, maar we moeten ze zelf genereren via IDE., en verder doe je ook niet wat er in de opdracht staat (ofwel heb je ze niet correct ingegeven). Waar wordt daar ergens melding gemaakt van het gebruik van random getallen? Ik denk dat je beter eens met een medestudent de opdracht uitklaart, want volgens mij heb je die niet goed begrepen.

Nou ja, niemand of bijna niemand begrijpt die opdracht. En zoal ik al eerder zei, we hebben geen cursus, geen handboek, niets. We moeten maar alles neerpennen wat die zegt, maar die is geen vette. En om hulp vragen, moeten we niet bij hem zijn, want "Google is je beste vriend."

Die prof zei zelf dat om random getallen te genereren we Math.class op Google moet zoeken, maar dit hebben we niet in de lessen gezien. Over over die TRUE of FALSE heeft die ook geen uitleg gegeven.
En overigens plaatst hij geen extra oefeningen, extra uitleg, slides,... op blackboard.

Ik begrijp dat het misschien bij jullie vaag overkomt, dat heb ik ook, maar ik heb gewoon geschreven wat die opdracht. Ik begrijp wel de opdracht, maar dat we zelf opzoeken moeten gaan hoe we dat doen ziet me toch wat tegen hoor.


Taak oef.
Programma met 3 methodes: 1 main methode, 1 druk getallen methode en bepaald even of oneven methode

*Drukken van getallen 1 parameter gebruiken ==> aantal iteraties
for ()-lus aantal keren uitvoeren

1) eerst random getallen genereren tussen 0 en 100 via Math.class (zelf opzoeken op Google)
==> afdrukken als even EN kleiner is dan 50

2) if....else-lus (methode?? aanroepen in lus)
TRUE als getal even is
FALSE als getal oneven is.

Dit is wat de prof zei. En verder uitleg wou die niet geven. 2 weken geleden heeft hij ook zoiets geflikt met een vorige opdracht "door opzoeken in Google". Ik snap uberhaupt niet waarom hij docent is :S

Bardock

Legacy Member
Damn it :(

Pfff, ik ga er een nachtje over slapen.
Toch bedankt voor de feedbacks. Ik hou jullie op de hoogte.

Mochten enkele van jullie nieuwsgierig zijn, dit is wat ik heb, na een uitgebreide en heldere uitleg van Sharky en ultddave;


-----------------------------------------------------------------------------------------------------------


public class GeneratePrintTrueFalse {

public static void main(String[] args) {
int ondergrens = 0;
int bovengrens = 100;
drukEvenGetallen(ondergrens, bovengrens);
}

private static void drukEvenGetallen(int ondergrens, int bovengrens) {
boolean even;
for (int i = 0; i < 10; i++) {
int getal = (int) ((Math.random() * 100));

even = isEven(getal);
if (even == true) {
if(<50){
}

System.out.println(getal);
}





private static boolean isEven(int getal) {
boolean even;
if (getal % 2 == 0) { /* Is het getal deelbaar door 2 zonder rest? */
even = true;
} else {
even = false;
}
return even;
}
}

------------------------------------------------------------------------------------------------------------------

Het is niet volledig juist, maar ik zal zien wat de prof morgen zal zeggen (tenminste als hij het wil -_-")

Bardock

Legacy Member
Nog een vraagje, hoe kun jij zo'n venster "creëren" zoals sharky en ultddave dat hebben gedaan?

**Edit: Sharky & Ultddave, bedankt voor de nodige uitleg. Het heeft me zeker verder geholpen. :)

PS: mijn excuses :)

SharkyXTS

Legacy Member
[code_] yadda yadda [/code_]

Maar dan zonder de underscore na code.

Recipe4hate

Legacy Member
Bardock zei:
Die prof zei zelf dat om random getallen te genereren we Math.class op Google moet zoeken, maar dit hebben we niet in de lessen gezien. Over over die TRUE of FALSE heeft die ook geen uitleg gegeven.
En overigens plaatst hij geen extra oefeningen, extra uitleg, slides,... op blackboard.

Klinkt misschien cru, zeker omdat je er bijzonder weinig van kent, maar programmeren is veel zelf opzoeken. De prof kan je de syntax en de taal bijbrengen, maar het gebruik van externe libraries en klassen (zoals Math) is vaak veel te uitgebreid om (vanbuiten) te leren.
Daarin snap ik dat je prof vraagt om dit te googlen. (iets wat ik in mijn functie dagelijks doe ;-))

Bardock

Legacy Member
Recipe4hate zei:
Klinkt misschien cru, zeker omdat je er bijzonder weinig van kent, maar programmeren is veel zelf opzoeken. De prof kan je de syntax en de taal bijbrengen, maar het gebruik van externe libraries en klassen (zoals Math) is vaak veel te uitgebreid om (vanbuiten) te leren.
Daarin snap ik dat je prof vraagt om dit te googlen. (iets wat ik in mijn functie dagelijks doe ;-))

Ah ok, dan neem ik mijn woorden terug. Maar maak gebruik je een boek of syllabus met alle libraries en klasse in je functie?
Ik studeer overigens tew, en had programmeren als keuzevak opgenomen. Richtingen zoals toegepaste informatica, ICT, informatica,.... gebruiken studenten ook boeken?

Recipe4hate

Legacy Member
Ik heb ondertussen zeker 6 boeken gelezen over bijv. C# (leunt bij momenten dicht tegen Java) en er is er geen één die de helperklasse Math of Random in detail beschrijft :)
Meestal biedt de IDE of de ontwerper van een framework of de taal een soort object browser / knowledge database / language specification aan.

Bijvoorbeeld:
Math (Java Platform SE 7 )
Ben wel al hele lange tijd niet meer met Java bezig geweest. Weet dus niet hoe up-to-date deze is

Massis

Legacy Member
Code:
private static void main(String args[]){
    //50 = aantal iteraties
    printgetallen(50);
}


private void printgetallen(int iteratie){
   //voor i van 0 tot iteratie = aantal keer
   for(int i = 0; i < iteratie; i++){  
      //genereer random waarde tussen 0 en 100
      int current = Math.random() * 100;
      if(current < 50){
          if(isEven(current)){
              System.out.println(current);
          }
      }
}

private boolean isEven(int number){
    //als delen door 2 rest 0 geeft = getal even
   return (number%2 == 0);
}

Meer moet dat toch niet zijn?

Bardock

Legacy Member
Massis zei:
Code:
private static void main(String args[]){
    //50 = aantal iteraties
    printgetallen(50);
}


private void printgetallen(int iteratie){
   //voor i van 0 tot iteratie = aantal keer
   for(int i = 0; i < iteratie; i++){  
      //genereer random waarde tussen 0 en 100
      int current = Math.random() * 100;
      if(current < 50){
          if(isEven(current)){
              System.out.println(current);
          }
      }
}

private boolean isEven(int number){
    //als delen door 2 rest 0 geeft = getal even
   return (number%2 == 0);
}

Meer moet dat toch niet zijn?

Ja, maar nog steeds krijg ik een foutmelding. Als ik op het knop run drukt, begint het programma "te lopen" maar het stopt niet. Dan begint mijn laptop te haperen en wordt mijn processor warmer en warmer :(

Hetgeen wat ik nu wil is gewoon eerst 10 (of 20) willekeurige getallen tussen 0 en 100 genereren. Niet één keer alles, maar stap voor stap. Eerst zal het eerste willekeurige getal verschijnen, dan bepaalt die of het een even oneven getal is. Als het een even getal is, dan zegt Boolean even TRUE (via visualisatie compiler EVizor) en zal dat getal afdrukken via System.out.println(). Indien het getal oneven is, dan zegt Boolean even FALSE en dat getal zal NIET afgedrukt worden. Daarna verschijnt het tweede willekeurige getal (nadat het 1ste getal al gegeneerd is en het programma bepaalt of het even of oneven is) enzovoort... tot ik dan 10 (of 20) willekeurige getal heb gegenereerd. Hoeveel even getal er afgedrukt, maakt niet uit. Het programmaatje kiest die getallen zelf.

Als ik het volgende willekeurige getal wil genereren na al die bovenstaande acties, moet ik i++ of getal++ of (Math.random() * 100) gebruiken en waar moet ik die zetten?

(Wellicht staan de iteraties do(lus) en while-lus verkeerd, of gebruiken ze verkeerd, of misschien moet ik één van die twee of allebei uitsuilten.)

Ik heb een andere projectnaam gekozen en volg het voorbeeld van Massis en ultddave.

Mijn code:
Code:
public class DrukEvenGetallen {

    public static void main(String[] args) {
        int ondergrens = 0;
        int bovengrens = 100;
        int getal = (int) ((Math.random()) * 100);
        drukEvenGetallen(getal);
    }

    private static void drukEvenGetallen(int getal) {
        boolean even;
        for (int i = 0; i < 10; i++) {
            do{
            


                even = isEven(getal);
                if (even == true) {
                    if (getal < 50) {

                        System.out.println(getal);
                    }
                    (Math.random() * 100)++;

                }
            
        }while(i=10);
    }

    }

    private static boolean isEven(int getal) {
        boolean even;
        if (getal % 2 == 0) { /* Is het getal deelbaar door 2 zonder rest? */
            even = true;
        } else {
            even = false;
        }
        return even;
    }
}


--------------------------------------------------------------

En dit is een voorbeeld van een soortgelijke oefening als die van mij van een kennis van mij die TI studeert.

NIET mijn code:
Code:
public class EvenGetallen {

public static void main(String[] args){
int bovengrens;
int ondergrens;
ondergrens = 50;
bovengrens = 100;
drukEvenGetallen(ondergrens, bovengrens);


}
private static boolean controleerEvenGetal(int getal){
boolean even;
if ((getal%2)==0){
even = true;
}
else {
even = false;
}
return even;
}

private static void drukEvenGetallen(int ondergrens, int bovengrens){
boolean even;
while (ondergrens<=bovengrens){
even = controleerEvenGetal(ondergrens);
if (even==true dit kan ook gewoon &#8220;even&#8221; zijn){
System.out.println(ondergrens);
}
ondergrens++;
}
}
}


Ik zie dus wel dat ik ergens een ++ onder die if-lus moet zeggen, maar ik weet niet hoe.... Pfff, programmeren is veel tijd insteken en veel geduld uitoefenen.


Zitten jullie programmeurs of kenners van programmeren soms met jullie handen in jullie haren? :) Gewoon uit curiositeit.


En alleszins, bedankt ik jullie al op voorhand voor jullie hulp :) (sorry voor deze lange tekst)

Bardock

Legacy Member
Oh ja, ik programmeer in NetBeans 6.8 en gebruik de compiler(?) EVizor.

Mackenzie

Legacy Member
Run dit eens in je Netbeans, Massis zijn code was goed, buiten 1 accolade vergeten... Maar dit toont de random getallen he in plaats van gewoon 0,2,4,...,50
Voor enkel de even en op volgorde is het gewoon die printgetallen(100) te nemen en aan te passen dat je gewoon de isEven(i) zet in de loop en de i afprint.
Code:
/**
 *
 * @author Mackenzie
 */
public class Testapp {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    
    //50 = aantal iteraties
    printgetallen(50);
}


private static void printgetallen(int iteratie){
   //voor i van 0 tot iteratie = aantal keer
   for(int i = 0; i < iteratie; i++){  
      //genereer random waarde tussen 0 en 100
      int current = (int) (Math.random() * 100);
      if(current < 50){
          if(isEven(current)){
              System.out.println(current);
          }
      }
}
}

private static boolean isEven(int number){
    //als delen door 2 rest 0 geeft = getal even
   return (number%2 == 0);
}
}

Bardock

Legacy Member
Mackenzie zei:
Run dit eens in je Netbeans, Massis zijn code was goed, buiten 1 accolade vergeten... Maar dit toont de random getallen he in plaats van gewoon 0,2,4,...,50
Voor enkel de even en op volgorde is het gewoon die printgetallen(100) te nemen en aan te passen dat je gewoon de isEven(i) zet in de loop en de i afprint.
Code:
/**
 *
 * @author Mackenzie
 */
public class Testapp {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    
    //50 = aantal iteraties
    printgetallen(50);
}


private static void printgetallen(int iteratie){
   //voor i van 0 tot iteratie = aantal keer
   for(int i = 0; i < iteratie; i++){  
      //genereer random waarde tussen 0 en 100
      int current = (int) (Math.random() * 100);
      if(current < 50){
          if(isEven(current)){
              System.out.println(current);
          }
      }
}
}

private static boolean isEven(int number){
    //als delen door 2 rest 0 geeft = getal even
   return (number%2 == 0);
}
}

Dankje wel Mackenzie en (tuurlijk ook Massis, Sharky en ultddave voor de voorzet ^^)!!!! Eindelijke runt de programma perfect zonder dat mijn laptop happert. Nu ik wat gekalmeerd ben, weet ik waar mijn fout zat. En inderdaad zoals enkelen dat aanhaalde, had ik de opdracht(grandioos fataal)/oefening(ik ben wat aan oefenen) niet "goed begrepen" of m.a.w. ik las mijn opdracht niet goed na. Er staat letterlijk "DrukGetallen 1 paramater => aantal iteraties en in for()-lus aantal keren iteratie uitvoeren ==> en zoals andere aan zeiden dat ik dit for(int i = 0 ; i < iteratie ; i++) moet schrijven.

Mag ik voor aantal iteraties bv. 20 keer of 80 keer uitvoeren, of moet het per se 50 zijn?
In de for()-lus, mag ik " i < iteratie " omzetten in " i = iteratie " of moet het altijd < (kleiner zijn dan)?

Nu ik vertrokken ben en het beter begrijp, kan ik het volgende private methode boolean TRUE-FALSE schrijven/maken/programma.
(srry voor het niet gebruiken van de juiste termen)

Ik post later een update.


(Hopelijk ben ik niet tot last ^^)

Mackenzie

Legacy Member
Kijk een for-lus werkt heel eenvoudig:
for(int i = 0; i < 10; i++){ ... }
dit betekent dus: voer wat tussen de accolades staat uit in een loop en wat moet je dan weten, hoe vaak moet die loopen? Dat bepaal je door die voorwaarde;
je zegt beginnend bij een i = 0
i++ betekent dat elke keer dat je loop is gebeurd je bij die i 1 bijtelt.
en de i<10 is de voorwaarde; je doet die loop en dus de 1 erbijtellen ZOLANG i kleiner is als 10, dus in dit geval gaat hij het 10 keer uitvoeren, namelijk van i=0 tot en met i=9
Vandaar dat jouw i=10 niets gaat doen, want je zet i op 0 en dan gaat hij niet door de loop gaan omdat er niet aan de voorwaarde is voldaan.

En een methode om een TRUE of FALSE terug te geven, is ook eenvoudig:
Code:
private boolean isEven(int number){
   return (number%2 == 0);
}
Voor een methode te maken schrijf je eerst altijd de scope (dus public, private, protected) en daarna het soort object dat je wilt dat de methode teruggeeft (in dit geval wil je true/false terugkrijgen dus een boolean, als je wilt dat de methode niets teruggeeft zet je void) en daarna de methode naam (in dit geval isEven) met daarachter tussen de haakjes de parameters die je aan de methode wilt meegeven, in dit geval een nummertje.
Voor het teruggegeven van de waarde moet je return zetten. En dan kan je kiezen ofwel maak je een boolean variabele aan en zet je die op true/false afhankelijk van een voorwaarde en return je die variabele. Ofwel zoals in het voorbeeld hierboven return je gewoon het resultaat van die voorwaarde meteen (dit is bij eenvoudige zaken zoals dit het properste/minste typwerk).

Als je iets niet begrijpt, zeg je het maar ;) ben niet wow goed in zaken op een voor-iedereen-verstaanbare manier uit te leggen (soms te kinderlijk gemakkelijk en soms te moeilijk) :p maar ik wilt wel proberen.

Bardock

Legacy Member
Mackenzie zei:
Kijk een for-lus werkt heel eenvoudig:
for(int i = 0; i < 10; i++){ ... }
dit betekent dus: voer wat tussen de accolades staat uit in een loop en wat moet je dan weten, hoe vaak moet die loopen? Dat bepaal je door die voorwaarde;
je zegt beginnend bij een i = 0
i++ betekent dat elke keer dat je loop is gebeurd je bij die i 1 bijtelt.
en de i<10 is de voorwaarde; je doet die loop en dus de 1 erbijtellen ZOLANG i kleiner is als 10, dus in dit geval gaat hij het 10 keer uitvoeren, namelijk van i=0 tot en met i=9
Vandaar dat jouw i=10 niets gaat doen, want je zet i op 0 en dan gaat hij niet door de loop gaan omdat er niet aan de voorwaarde is voldaan.

En een methode om een TRUE of FALSE terug te geven, is ook eenvoudig:
Code:
private boolean isEven(int number){
   return (number%2 == 0);
}
Voor een methode te maken schrijf je eerst altijd de scope (dus public, private, protected) en daarna het soort object dat je wilt dat de methode teruggeeft (in dit geval wil je true/false terugkrijgen dus een boolean, als je wilt dat de methode niets teruggeeft zet je void) en daarna de methode naam (in dit geval isEven) met daarachter tussen de haakjes de parameters die je aan de methode wilt meegeven, in dit geval een nummertje.
Voor het teruggegeven van de waarde moet je return zetten. En dan kan je kiezen ofwel maak je een boolean variabele aan en zet je die op true/false afhankelijk van een voorwaarde en return je die variabele. Ofwel zoals in het voorbeeld hierboven return je gewoon het resultaat van die voorwaarde meteen (dit is bij eenvoudige zaken zoals dit het properste/minste typwerk).

Als je iets niet begrijpt, zeg je het maar ;) ben niet wow goed in zaken op een voor-iedereen-verstaanbare manier uit te leggen (soms te kinderlijk gemakkelijk en soms te moeilijk) :p maar ik wilt wel proberen.

Jouw/uw uitleg begrip ik in één keer dan wat onze prof dat ik de voorbije vier weken heeft verteld. Ik neem aan dat je affiniteiten hebt met programmeren (en/of informatica in het algemeen). :) Ben je ermee dagelijks mee bezig, oefen je een functie uit waarmee je dit dagelijks mee maakt? (Hoeft niet te vertellen als je niet wil).

Bardock

Legacy Member
Ik denk dat ik het ongeveer heb (geen foutmeldingen en het programma loopt perfect in EVizor).

Code:
public class DrukEvenGetallen {

    public static void main(String[] args) {
        /* 50 = aantal keren iteraties herhalen */
        /* declaratie VARIABELE iteratie van het type INTEGER */
        int iteratie;
        /* toewijzen waarde 50 aan VARIABELE iteratie */
        iteratie = 50;
        drukEvenGetallen(iteratie);
    }
/* In parameter drukEvenGetallen => aantal iteraties of declaratie integer iteratie */
    private static void drukEvenGetallen(int iteratie) {
        /* In private methode variabele even TRUE of FALSE weergeven
         *Toont TRUE als het een even getal is en FALSE als het een
         * oneven getal is.
         */
        boolean even;
        /* Voor i van 0 tot iteratie = aantal keren (uitvoeren) */
        for (int i = 0; i < iteratie; i++) {
            /* Genereren van willekeurige getallen tussen 0 en 100 */
            int currentGetal = (int) ((Math.random() * 100));
            /* Bepalen of het genererende getal even of oneven is */
            even = isGetalEvenofOneven(currentGetal);
            /* Als even of even getal waar is en variabele even toont TRUE in private methode */
            if (even == true) {
                /* Voorwaarde!: even getal moet kleiner zijn dan 50 */
                /* ik heb bijkomende voorwaarde toegevoegd om te zien wat het geeft ^^ */
                if (currentGetal < 50 && currentGetal != 0 || currentGetal > 80 && currentGetal != 0) {
                    /* afdrukken als het even getal voldoet aan de voorwaarde(n) */
                    System.out.println(currentGetal);
                }

            }
        }
    }

    private static boolean isGetalEvenofOneven(int genererendeGetal) {
        boolean even;
        /* Is het generende getal deelbaar door 2 zonder rest? (rest = 0) */
        if (genererendeGetal % 2 == 0) {
            /* als het waar is en het getal is even, dan zal de boolean TRUE zijn */
            even = true;
            /* als dat niet waar is, en het getal is oneven, dan zal de boolean FALSE zijn */
        } else {
            even = false;
        }
        /* Retourneer VARIABELE EVEN terug in PRIVATE METHODE drukEvenGetallen */
        return even;

    }
}

Tussen de codes heb ik commentaren gezet zodat ik niet zou vergeten hoe ik het weer deed.

Voor het return van TRUE of FALSE moeten we het zo schrijven/programmeren ipv. eenvoudigste code zoals Mackenzie als zei. Wou namelijk duidelijk true of false zien in de (private) methode.

Bardock

Legacy Member
Zonder commentaar

Code:
public class DrukEvenGetallen {

    public static void main(String[] args) {
       
        int iteratie;       
        iteratie = 100;
        drukEvenGetallen(iteratie);

    }

    private static void drukEvenGetallen(int iteratie) {
        
        boolean even;        
        for (int i = 0; i < iteratie; i++) {            
            int currentGetal = (int) ((Math.random() * 100));          
            even = isGetalEvenofOneven(currentGetal);           
            if (even == true) {
                /* Voorwaarde!: even getal moet kleiner zijn dan 50 */
                /* ik heb bijkomende voorwaarde toegevoegd om te zien wat het geeft ^^ */

                if (currentGetal < 50 && currentGetal != 0 || currentGetal > 80 && currentGetal != 0) {               
                    System.out.println(currentGetal);

                }
            }
        }
    }


    private static boolean isGetalEvenofOneven(int genererendeGetal) {

        boolean even;   
        if (genererendeGetal % 2 == 0) {         
            even = true;    
        } else {
            even = false;
        }        
        return even;

    }
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan