Filteren van 'goede' letters bij Galgje

Status
Niet open voor verdere reacties.

hassing

Gebruiker
Lid geworden
25 sep 2007
Berichten
43
Beste JAVA programmeurs,

ik moet voor mijn opleiding een simpele non Gui matige Galgje ontwerpen. Ik ben al een eindje opweg maar loop vast bij het "eruit filteren" van goed geraden letters.
- deze wil ik alleen maar laten zien en niet 'ook' de verkeerd geraden letters:

Ook wil ik van het te raden woord eruit filteren hoe lang (hoeveel karakters) het woord is.
Dit om met (eventuele) puntjes de woord lengte aan te geven.

Iemand een idee?





Hier mijn programma:

Code:
import java.util.*;
import java.io.*;


public class Galgje
{
	public static void main(String [] args) throws IOException
	{
		
	int maxpogingen = 7;
	int woordlengte;
	StringBuffer geradenletters = new StringBuffer();
		
	//plukt een woord uit het tekstbestand
	Scanner fileScan = new Scanner(new FileInputStream("woord.txt"));
	String geheimwoord = fileScan.next();
	
	//Creatie van StringBuffer 
	StringBuffer word = new StringBuffer();
	for(int i = 0; i <= geheimwoord.length(); i++)
	word.append("_");
	System.out.println(word);
		
		
	System.out.println("Dit is Galgje");
	System.out.println("U heeft 7 kansen om het geheimwoord te raden.");
	 // System.out.println("Uw geheime woord is" + woordlengte + " letters lang.");
	// weet ik ook niet hoe ik de lengte van woord moet weergeven		
	
		String letter;
		while(maxpogingen > 0)
		{
		System.out.println("Uw opgegeven letters zijn: " + geradenletters);
		System.out.print("Voer een letter in: ");
		Scanner inScan = new Scanner(System.in);
		letter = inScan.next();
		geradenletters.append(letter + " ");	
		
		if(geheimwoord.indexOf(letter) != (-1))
		{
			 geheimwoord.indexOf(letter);
			 System.out.println("Deze invoering is goed!");
			}
			else
		
			maxpogingen--;
			System.out.println("U heeft " + maxpogingen + " leven(s) over.");
			}
			
		
	
	}
}
 
Laatst bewerkt:
Code:
// System.out.println("Uw geheime woord is" + woordlengte + " letters lang.");

Mag je van maken:
Code:
System.out.println("Uw geheime woord is" + String.ValueOf(geheimwoord.length) + " letters lang.");

Of je kan het ook als volgt doen:

Code:
//plukt een woord uit het tekstbestand
Scanner fileScan = new Scanner(new FileInputStream("woord.txt"));
String geheimwoord = fileScan.next();

woordlengte = geheimwoord.length();
//en dan vervolgens de print
System.out.println("Uw geheime woord is" + String.ValueOf(woordlengte) + " letters lang.");

De 2e manier is denk ik het beste, omdat je nog meer acties wil doen met de lengte van het woord.. zoals puntjes zetten.
 
Laatst bewerkt:
Code:
import java.util.*;
import java.io.*;


public class Galgje
{
	public static void main(String [] args) throws IOException
	{
		
	int maxpogingen = 7;
	int woordlengte;
	StringBuffer geradenletters = new StringBuffer();

	//plukt een woord uit het tekstbestand
	Scanner fileScan = new Scanner(new FileInputStream("woord.txt"));
	String geheimwoord = fileScan.next();
	
	//Creatie van StringBuffer 
	StringBuffer word = new StringBuffer();
	for(int i = 0; i <= geheimwoord.length(); i++)
	word.append("_");
	System.out.println(word);
		
		
	System.out.println("Dit is Galgje");
	System.out.println("U heeft 7 kansen om het geheimwoord te raden.");
	 // System.out.println("Uw geheime woord is" [COLOR="Navy"]+ geheimwoord.length( ) + [/COLOR]" letters lang.");
	// weet ik ook niet hoe ik de lengte van woord moet weergeven		
	
		String letter;
                [COLOR="Navy"]  String woord = "";
                for ( int i = 0; i < geheimwoord.length( ); ++i  )
                      woord += "." // voor elke letter zet je een punt[/COLOR]
		while(maxpogingen > 0 && [COLOR="Navy"]!geheimwoord.equals(woord) )[/COLOR] // stopconditie voor als het woord geraden is
		{
		System.out.println("Uw opgegeven letters zijn: " + [COLOR="Navy"]woord [/COLOR])
		System.out.print("Voer een letter in: ");
		Scanner inScan = new Scanner(System.in);
		letter = inScan.next();
		geradenletters.append(letter + " ");	[COLOR="Navy"]// ???[/COLOR]
		[COLOR="Navy"]
                letterOk = false;
                for( int i = 0; i < geheimwoord.length( ); i++ )
                      if ( letter.charAt( 0 ) == geheimwoord.charAt( i ) )
                      {
                             letterOk = true;
                             woord.charAt(i) = letter.charAt(0);
                        }
                [/COLOR]
			}
			[COLOR="Navy"]if ( !letterOk )[/COLOR]
			   [COLOR="Navy"] --maxpogingen-;
                         else
                            System.out.println("Deze invoering is goed!");[/COLOR]
			System.out.println("U heeft " + maxpogingen + " leven(s) over.");
			}
			
		
	
	}
}

zoiets dan, het principe is dat ge eerst een string ( kan ook een char array zijn naar keuze ) van dezelfde grootte aanmaakt
met allemaal puntjes. Daarna kijkt ge of letter voorkomt in het geheimwoord, zoja dan zet ge het ipv een puntje in de nieuwe string.

de gebruiker ziet dan iets in de aard van ..p..l.
zo ziet hij ook de positie van de letters wat wel de bedoeling is met galgje.
Ik hoop dat het syntaxis een beetje correct is, ben niet meer zo "in" java
 
Galgje ..

Hartelijk dank voor uw reactie,

Optie twee lijkt mij ook beter alleen krijg ik wel de volgende melding voor mijn kiezen:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method ValueOf(int) is undefined for the type String

at galgje.main(galgje.java:20)

Ben ik dan nog iets vergeten te declareren?

mvg

-





Code:
// System.out.println("Uw geheime woord is" + woordlengte + " letters lang.");

Mag je van maken:
Code:
System.out.println("Uw geheime woord is" + String.ValueOf(geheimwoord.length) + " letters lang.");

Of je kan het ook als volgt doen:

Code:
//plukt een woord uit het tekstbestand
Scanner fileScan = new Scanner(new FileInputStream("woord.txt"));
String geheimwoord = fileScan.next();

woordlengte = geheimwoord.length();
//en dan vervolgens de print
System.out.println("Uw geheime woord is" + String.ValueOf(woordlengte) + " letters lang.");

De 2e manier is denk ik het beste, omdat je nog meer acties wil doen met de lengte van het woord.. zoals puntjes zetten.
 
Laatst bewerkt:
Galgje ..

zoiets dan, het principe is dat ge eerst een string ( kan ook een char array zijn naar keuze ) van dezelfde grootte aanmaakt
met allemaal puntjes. Daarna kijkt ge of letter voorkomt in het geheimwoord, zoja dan zet ge het ipv een puntje in de nieuwe string.

de gebruiker ziet dan iets in de aard van ..p..l.
zo ziet hij ook de positie van de letters wat wel de bedoeling is met galgje.
Ik hoop dat het syntaxis een beetje correct is, ben niet meer zo "in" java

het is volgens mij nog niet de bedoeling dat ik het met array's oplos.
Ik zal er eens op mijn gemak naar kijken (naar aanpassingen en aantekeningen).
De bedoeling is duidelijk met de puntjes en daar ga ik snel mee verder.

Dank voor het meedenken .. en helaas .. de syntax is niet correct.
 
Galgje .. nog een vraagje

zoiets dan, het principe is dat ge eerst een string ( kan ook een char array zijn naar keuze ) van dezelfde grootte aanmaakt
met allemaal puntjes. Daarna kijkt ge of letter voorkomt in het geheimwoord, zoja dan zet ge het ipv een puntje in de nieuwe string.

de gebruiker ziet dan iets in de aard van ..p..l.
zo ziet hij ook de positie van de letters wat wel de bedoeling is met galgje.
Ik hoop dat het syntaxis een beetje correct is, ben niet meer zo "in" java


ik ben er nog niet uit waar het niet lukt.
Dit is mijn huidige code:

Ik moet eigenlijk nog 1 ding aan mijn programma toevoegen .. wanneer heeft de gebruiker het goed geraden ..
Het programma weet welke letters er in mijn woord zitten.
Nu moet hij nog controleren, als alle letters geraden zijn, toon bericht "goed zo" System.exit



Code:
import java.util.*;
import java.io.*;


public class galgje
{
	public static void main(String [] args) throws IOException
	{
		
		int maxpogingen = 7;
		int woordlengte;
		StringBuffer geradenletters = new StringBuffer();
		
		//plukt een woord uit het tekstbestand
		Scanner fileScan = new Scanner(new FileInputStream("woord.txt"));
		String geheimwoord = fileScan.next();

		//tonen van de lengte van het geheime woord
		woordlengte = geheimwoord.length();
		System.out.println("Uw geheime woord is " + String.valueOf(woordlengte) + " letters lang.");
	
			String letter;			
			String woord = "";
			
			// voor elke letter zet je een punt
        	for ( int i = 0; i < geheimwoord.length( ); i++  ) 
        	{
            woord += ".";
        	}
        	System.out.println(woord);
			
        	// voorwaarde als je nog pogingen over hebt
        	while(maxpogingen > 0)
			{
			System.out.println("Uw opgegeven letter(s) zijn: " + geradenletters);
			System.out.print  ("Voer een letter in: ");
			Scanner inScan = new Scanner(System.in);
			letter = inScan.next();
			geradenletters.append(letter + "_");
			
			//geraden letter
			if(geheimwoord.indexOf(letter) != (-1))
			{
				 geheimwoord.indexOf(letter);
				 System.out.println("");
				 System.out.println("Deze invoering is goed!");
				 System.out.println("");
				 System.out.println("U heeft " + maxpogingen + " leven(s) over.");
			}
			
			//verkeerd geraden woord
			else
			{
			maxpogingen--;
			System.out.println("");
			System.out.println("U heeft " + maxpogingen + " leven(s) over.");
			}
			
		while (maxpogingen <1)
		{
		  System.out.println("U heeft het woord niet geraden, U hangt!");
		  System.out.println("Het te raden woord was: " + geheimwoord);
		  System.exit(0);
		}
			
	
	}
}
}

Heeft U een idee waar ik het moet implementeren?

Ik ben U dankbaar voor tips en aanwijzingen.

-
 
Laatst bewerkt:
zoiets dan, het principe is dat ge eerst een string ( kan ook een char array zijn naar keuze ) van dezelfde grootte aanmaakt
met allemaal puntjes. Daarna kijkt ge of letter voorkomt in het geheimwoord, zoja dan zet ge het ipv een puntje in de nieuwe string.

de gebruiker ziet dan iets in de aard van ..p..l.
zo ziet hij ook de positie van de letters wat wel de bedoeling is met galgje.
Ik hoop dat het syntaxis een beetje correct is, ben niet meer zo "in" java


Dit moet ik er alware in zien te zetten:

Maxpoging = 7;
Woord = KIND;
Woordlengte = 4;


• Voer letter in: ‘’

Komt de ‘X’ voor in het woord?
Ja = i +1, goed geraden
Is i gelijk aan woordlengte?
Ja = woord geraden, einde
Nee = woord nog niet geraden, Voer letter in: ...

Nee = maxpoging -1
Voer letter in: ...
 
Wat je kan doen..
Elke keer dat je een letter raad word er gekeken of deze goed is.
Is deze goed, dan wordt hij toegevoegd aan het woord op de plaatsen.
De puntjes worden dan voor die letters weggehaald.

Als je de letter(s) dan hebt toegevoegd, dan kan je vervolgens de puntjes gaan tellen welke nog over zijn in het woord.
Zijn dat er 0, dan is het opgelost.

(zullen wel meer mogelijkheden zijn, dit is er een van)
 
ik ben er nog niet uit waar het niet lukt.
Dit is mijn huidige code:

Ik moet eigenlijk nog 1 ding aan mijn programma toevoegen .. wanneer heeft de gebruiker het goed geraden ..
Het programma weet welke letters er in mijn woord zitten.
Nu moet hij nog controleren, als alle letters geraden zijn, toon bericht "goed zo" System.exit

Heeft U een idee waar ik het moet implementeren?

Ik ben U dankbaar voor tips en aanwijzingen.

gr. Bart

zoiets dan..je vult het woord met "..." langzaam in en vergelijkt het elke ronde met het te raden woord. zijn ze gelijk dan stop
je.

Code:
import java.util.*;
import java.io.*;


public class galgje
{
	public static void main(String [] args) throws IOException
	{
		
		int maxpogingen = 7;
		int woordlengte;
		StringBuffer geradenletters = new StringBuffer();
		
		//plukt een woord uit het tekstbestand
		Scanner fileScan = new Scanner(new FileInputStream("woord.txt"));
		String geheimwoord = fileScan.next();

		//tonen van de lengte van het geheime woord
		woordlengte = geheimwoord.length();
		System.out.println("Uw geheime woord is " + String.valueOf(woordlengte) + " letters lang.");
	
			String letter;			
			String woord = "";
			
			// voor elke letter zet je een punt
        	for ( int i = 0; i < geheimwoord.length( ); i++  ) 
        	{
            woord += ".";
        	}
        	System.out.println(woord);
			
        	// voorwaarde als je nog pogingen over hebt
        	while( !woord.equals( geheimwoord ) && maxpogingen > 0)
		    {
			int index = 0;
			System.out.println("Uw opgegeven letter(s) zijn: " + geradenletters);
			System.out.print  ("Voer een letter in: ");
			Scanner inScan = new Scanner(System.in);
			letter = inScan.next();
			geradenletters.append(letter + "_");
			
			//geraden letter
			if(( geheimwoord.indexOf(letter)) != (-1)) // index van het gevonden karakter bewaren
			{
			    String woordTmp = "";
			    for (int i = 0; i < geheimwoord.length( ); i++) 
				if( geheimwoord.charAt( i ) == letter.charAt( 0 ) )// elke verschijning van de juiste letter vinden
				    woordTmp += letter.charAt( 0 ); // juiste letter invoegen
				else
				    woordTmp += woord.charAt(i); // anders letter die er stond invoegen
			    woord = woordTmp;

				 geheimwoord.indexOf(letter);
				 System.out.println("");
				 System.out.println("Deze invoering is goed!");
				 System.out.println("");
				 System.out.println( woord );
				 System.out.println("U heeft " + maxpogingen + " leven(s) over.");
			}
			
			//verkeerd geraden woord
			else
			{
			maxpogingen--;
			System.out.println("");
			System.out.println("U heeft " + maxpogingen + " leven(s) over.");
			}
			
		while (maxpogingen <1)
		{
		  System.out.println("U heeft het woord niet geraden, U hangt!");
		  System.out.println("Het te raden woord was: " + geheimwoord);
		  System.exit(0);
		}
			
	
	}
}
}
 
G..g.e

Heren,

dit is geweldig! Ik was echt niet op die char.At functie gekomen om de puntjes van "woord" om te zetten in correct opgegeven letters.

Dit voldoet volledig aan mijn wens .. ik ben jullie echt vreselijk dankbaar voor het meedenken voor mijn Galgje opdracht.

:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan