Galgje blueJ

Moderators: jkien, Xilvo

Reageer
Gebruikersavatar
Berichten: 8

Galgje blueJ

Gegroet
 
Ik probeer het spel galgje te maken in bluej (gemakkelijkere versie van java geloof ik) maar ik zit vast met de methode om te zien of een letter een deel is van het woord.
 
public void kiesWoord() {

      String[] woordArray = {

      "bergtop", "kristal", "boomhut"

    };

}

 public void raadLetter( ) {

    char letter [] = new char [woordArray.length];

    char input = 'a';

    for (int i = 0; i< woordArray.length ; i++) {

        letter = '.';

    }

        

}
 
Dit heb ik. Waarschijnlijk zit ik helemaal verkeerd-ik ben ook geen krak in programmeren- maar via het internet kwam ik een beetje hierbij. nu krijg ik de foutmelding java.lang.NullPointerException: null.
Kan iemand me vertellen wat ik fout doe?
Extra uitleg over de for(int i = 0.... zou ik ook handig vinden, ik begrijp dit namelijk niet helemaal.
Alvast bedankt!

Gebruikersavatar
Moderator
Berichten: 4.094

Re: Galgje blueJ

Om de fout te kunnen reproduceren hebben we meer nodig dan alleen je methode. Heb je meer code te posten?
 
Over die for loop het volgende. Het heet een loop, omdat alles wat daarna tussen die { brackets } staat herhaald wordt. Wat tussen de brackets staat, noemen we de body. De drie zaken in de regel met for zelf geven aan hoe vaak het herhaald moet worden. Laten we ze een voor een bekijken.
 
  • int i = 0: Dit is ene initialisatie van een variabele. Vanaf dit punt is er een variabele genaamd i, met als type int, en voorlopig heeft hij de waarde 0.
  • i < woordArray.length: Dit geeft aan of de code in de body (nogmaals) uitgevoerd moet worden of niet. Wanneer de code evalueert tot True, dan wordt de body (nogmaals) uitgevoerd, wanneer de code evaluaeert tot False, dan wordt de body niet (nogmaals) uitgevoerd. Je kunt het lezen als if (i < woordArray.length) { do the loop }.
  • i++: Dit is wat er gebeurt nadat de gehele code in de body uitgevoerd is. In dit geval wordt de variabele dus met 1 opgehoogd (i++ is hetzelfde als i = i+1).
Het proces verloopt nu als volgt. Je maakt een variabele aan en kijkt of de conditie waar is. Meestal is die in het begin waar. Dan ga je de loop in, waar je een variabele beschikbaar hebt met als waarde 0. Je doorloopt de gehele code in de body, en verhoogt op het einde i met 1. Daarna begin je weer van voor. Je kijkt of de conditie nog steeds waar is, en zo ja, dan ga je de body in met een variabele i met als waarde 1. De body wordt uitgevoerd, en op het einde verhoog je i met 1. Vervolgens kijk je weer of de conditie waar is, enz. Op een gegeven moment is i groot genoeg dat de conditie niet meer waar is, en dan ben je klaar met de loop, en ga je verder in de code.
 
 
p.s. Zelfs voor beginnende programmeurs raad ik aan hun code (variabele en functienamen) altijd in het Engels te schrijven.

Gebruikersavatar
Berichten: 2.906

Re: Galgje blueJ

LotteV schreef: nu krijg ik de foutmelding java.lang.NullPointerException: null.
Kan iemand me vertellen wat ik fout doe?
 
De vraag is waar die foutmelding ontstaat (in welke regel van je code). Als het goed is kun je dat lezen in je editor als deel van de foutmelding.
 
Ik gok erop dat die NullPointerException  in deze regel ontstaat:
 
char letter [] = new char [woordArray.length];
 
dit komt omdat de array woordArray alleen binnen de functie kiesWoord() gedefinieerd is, en de functie raadLetter( ) weet dus niet dat deze array bestaat. Je zal woordArray ofwel buiten de functie moeten definieren, ofwel woordArray als parameter moeten doorgeven aan raadLetter().
 
 
(althans, dit geldt voor Java. Van BlueJ heb ik geen verstand)
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }

Gebruikersavatar
Berichten: 8

Re: Galgje blueJ

Ik krijg indd men foutmelding bij char letter [ ]...
 
Maar bij men attributen heb ik woordArray gedifinieerd
------------------------------------------------------------------------------
public class Galgje

{

    private char [] woordArray;

    private int aantalPogingen = 7;

    private boolean letterJuist;

    private boolean letterAlGeraden;

    private char letter;

    

 public void kiesWoord() {

      String[] woordArray = {

      "bergtop", "kristal", "boomhut"

    };

}

  public void raadLetter() {

    char letter [] = new char [woordArray.length];

    char input = 'a';

    for (int i = 0; i< woordArray.length ; i++) {

        letter = '.';

    }

}

 
--------------------------------------------------------
Moet ik het anders doen? Ik kan misschien woordArray vervangen door gewoon 3 maar is dit een goed alternatief?

Berichten: 7.068

Re: Galgje blueJ

BlueJ is een ontwikkelomgeving voor Java (net zoals NetBeans en Eclipse).

@LotteV: Je gaat denk ik te snel. Probeer eerst eens een programmaatje te schrijven wat zonder problemen werkt. Maak bijvoorbeeld eerst eens een programma dat iets print.

Gebruikersavatar
Berichten: 8

Re: Galgje blueJ

EvilBro schreef: BlueJ is een ontwikkelomgeving voor Java (net zoals NetBeans en Eclipse).

@LotteV: Je gaat denk ik te snel. Probeer eerst eens een programmaatje te schrijven wat zonder problemen werkt. Maak bijvoorbeeld eerst eens een programma dat iets print.
 
Dat lukt me allemaal wel. Oefeningen die ik vond zoals de getallen van fibonacci, een spel met lucifers,.. gingen zeer vlot. Ik geloof dat ik een beetje in de mist ga met die for loop.

Berichten: 7.068

Re: Galgje blueJ

Kun je stap voor stap beschrijven wat je met de for-loop wilt bereiken (in woorden)?

Gebruikersavatar
Berichten: 8

Re: Galgje blueJ

EvilBro schreef: Kun je stap voor stap beschrijven wat je met de for-loop wilt bereiken (in woorden)?
 
Van het begin tot het einde wil ik eigenlijk:
-Ik laat men programma een random woord kiezen uit een array
-Ik geef daarna een letter in via een andere methode en deze kijkt dan of de letter een element is van het woord
-Indien ja: zal de letter op de juiste plaats komen met de andere, nog te rade letters weergeven als een bv een *
voorbeeld honden is men woord en ik gok op e dan krijg ik ****e*
-Indien nee: er gaat een poging af van men aantal gok pogingen

Berichten: 7.068

Re: Galgje blueJ

Laten we beginnen met of de letter onderdeel is van het woord. Vul de volgende code aan:

Code: Selecteer alles

public class Main {
	public static boolean letterZitInWoord(String woord, char letter) {
		// hier moet jouw code die bepaalt of de letter in het woord zit. De code moet true teruggeven als dit zo is, anders false.
		return false;
	}
	
	public static void main(String[] args) {
		System.out.println("'a' zit in 'geheim': " + letterZitInWoord("geheim",'a'));
		System.out.println("'a' zit in 'aarde': " + letterZitInWoord("aarde",'a'));
		System.out.println("'i' zit in 'geheim': " + letterZitInWoord("geheim",'i'));
		System.out.println("'H' zit in 'geheim': " + letterZitInWoord("geheim",'H'));
	}
}

Gebruikersavatar
Berichten: 8

Re: Galgje blueJ

EvilBro schreef: Laten we beginnen met of de letter onderdeel is van het woord. Vul de volgende code aan:

Code: Selecteer alles

public class Main {
	public static boolean letterZitInWoord(String woord, char letter) {
		// hier moet jouw code die bepaalt of de letter in het woord zit. De code moet true teruggeven als dit zo is, anders false.
		return false;
	}
	
	public static void main(String[] args) {
		System.out.println("'a' zit in 'geheim': " + letterZitInWoord("geheim",'a'));
		System.out.println("'a' zit in 'aarde': " + letterZitInWoord("aarde",'a'));
		System.out.println("'i' zit in 'geheim': " + letterZitInWoord("geheim",'i'));
		System.out.println("'H' zit in 'geheim': " + letterZitInWoord("geheim",'H'));
	}
}
Oke, het lukt me niet. Ik denk dat ik het mss te ver zoek. Is er eigenlijk geen element waarmee ik het direct kan vergelijken? Ik zag op het internet dingen zoals contains() etc

Gebruikersavatar
Berichten: 8

Re: Galgje blueJ

Mag ik het ook zo oplossen?
 
 
public static boolean letterZitInWoord(String inputWoord, String inputLetter) {

        // hier moet jouw code die bepaalt of de letter in het woord zit. De code moet true teruggeven als dit zo is, anders false.

        String woord = inputWoord;

        String letter = inputLetter;

        if(woord.contains(letter)){

            return true;

        

          }

        else {

            return false;

          }

 }

Berichten: 7.068

Re: Galgje blueJ

Heb je deze code gerund? Doet ie het?
 
Het is helemaal niet nodig om inputWoord en inputLetter in woord en letter te zetten. Het volgende doet hetzelfde als wat jij hierboven tikte.

Code: Selecteer alles

public static boolean letterZitInWoord(String inputWoord, String inputLetter) {
        // hier moet jouw code die bepaalt of de letter in het woord zit. De code moet true teruggeven als dit zo is, anders false.
        return woord.contains(letter);
 }
Je kunt je dus afvragen of je uberhaubt hier een functie voor hoeft te schrijven aangezien je eigenlijk alleen de functie contains() gebruikt.

Berichten: 7.068

Re: Galgje blueJ

Ik had niet helemaal goed gecopy-pastaat... :)
 

Code: Selecteer alles

public static boolean letterZitInWoord(String woord, String letter) {
        // hier moet jouw code die bepaalt of de letter in het woord zit. De code moet true teruggeven als dit zo is, anders false.
        return woord.contains(letter);
 }

Reageer