Archief - [PROG] [JAVA] galgje

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.

MacK

Legacy Member
Hoi,

allereerst wil ik duidelijk maken dat ik een absolute beginner ben. Ik volg een opleiding Industrieel Ingenieur, en krijg daar een basis Java-cursus. Nu heb ik uit nieuwsgierigheid die cursus al volledig gelezen en ben ik een beetje aan het prutsen met java.

Anyway, ik ben dus een console versie van galgje aan het schrijven.
PHP:
public class galgje2
{
	public static void main(String[] args)
	{
		// namen ingeven
		Input inp = new Input();
		System.out.print("Geef uw naam in: ");
		String naam = inp.readLine();
		
		//woord ingeven
		System.out.print("Geef woord in: ");
		String woord = inp.readLine();
		
		
		//clear console
		clearConsole();
		
		//Streepjes op scherm zetten
		String streep = streepjesZetten(woord);
		System.out.println("");
		System.out.println("");
		System.out.println("   " + streep + "   ");
		System.out.println("");
		System.out.println("");
		
		
		// de oplossing declareren
		String oplossing = streep;
		
		// Spelen!
		int kansen = 9;
		for (int i=0;i<kansen;i++)
		{
		
			char letter = letterIngeven(naam);
			boolean juist = letterControleren(letter, woord);
			if (juist) 
			{
				oplossing = oplossingTonen(oplossing,woord,letter);
				clearConsole();
				System.out.println("");
				System.out.println("");
				System.out.println("   " + oplossing + "   ");
				System.out.println("");
				System.out.println("");
			}
		}
	}
	
	public static void clearConsole()
	{
		for(int i=0; i<800; i++)
		{
			System.out.println("\n");
		}
	}
	
	public static String streepjesZetten(String woord)
	{
		int lengte = woord.length();
		StringBuilder streep = new StringBuilder();
		char spatie = ' ';
		for(int i=0; i<lengte; i++)
		{
			if( woord.charAt(i) == spatie)
			{
				streep.append(" ");
			}
			else
			{
				streep.append("_");
			}	
		}
		
		return streep.toString();
		
	}
	
	public static char letterIngeven(String naam)
	{
		System.out.println("Geef een letter in, "+naam+" ! ");
		Input inp = new Input();
		char letter = inp.readChar();
		return letter;
	}
	
	public static boolean letterControleren(char letter, String woord)
	{
		boolean juist=false;
		for (int i=0; i<woord.length(); i++)
		{
			if ( letter == woord.charAt(i))
			{
				juist = true;
			}
			else
			{
	
			}
		}
		
		return juist;
	}
	
	public static String oplossingTonen(String oplossing, String woord, char letter)
	{
		int lengte = woord.length();
		StringBuilder oplossing1 = new StringBuilder(oplossing);
		for (int i=0; i<lengte;i++)
		{
			if ( letter == woord.charAt(i))
			{
				oplossing1.setCharAt(i,letter);
			}
			else
			{
				
			}
		}
		
		return oplossing1.toString();
	}
	
}

Nu heb ik dit gecompileerd in Jcreator en daar geeft hij geen errors. Maar als ik het dan uitvoer, dan loopt het programma vast na een paar beurten.

Got error:
Java.io.IOException: Stream closed

enig idee waar de fout zit?

Ps: ik weet dat ik bepaalde dingen nog niet heb zoals, wat als de ingegeven letter fout is of een ongeldige invoer van het woord, ... Voor het moment ga ik er nog vanuit dat ik geen foute letters ingeef.

MacK

Legacy Member
blijkbaar lag het probleem bij
clearConsole()

ditmaal is het geen for-lus van 800 , maar van 80 .. en nu zijn er geen probs :s

anyway, mijn probleem is opgelost, maar weet iemand waarom het mis ging? ik zou het graag ook begrijpen.

Unzip Attack

Legacy Member
enkele tips :

- probeer op naamgeving te letten, dingen als "juist=false" zijn nogal dubbelzinnig en geven niet echt aan waarvoor het staat :-)

- char spatie = ' ';
...
if( woord.charAt(i) == spatie)

is vrij nutteloos om die char aan te maken, doe het gewoon in 1 keer...
if( woord.charAt(i) == ' ')

- ik heb niet gecontroleerd of er nog iets moest komen maar die lege
'else { }'-clauses mag je ook gewoon weglaten :-)

- waarom gebruik je die "StringBuilder" en niet gewoon de String waarmee je bezig was ? of gewoon om eens StringBuilder te gebruiken ?

allezins veel succes er nog mee ;-)

MacK

Legacy Member
StringBuilder gebruik ik voor die 'append()' . Bij string vond ik geen equivalent van die methode. Tenzij ik er over kijk natuurlijk.

En op die andere zaken zal ik proberen letten in de toekomst. Bedankt voor de tips.

Unzip Attack

Legacy Member
MacK zei:
StringBuilder gebruik ik voor die 'append()' . Bij string vond ik geen equivalent van die methode. Tenzij ik er over kijk natuurlijk.

En op die andere zaken zal ik proberen letten in de toekomst. Bedankt voor de tips.

String a = "blabla";
a += "koekoek" ;
System.out.println(a);

probeer dat maar eens ;-)

.Acku.

Legacy Member
Unzip Attack zei:
String a = "blabla";
a += "koekoek" ;
System.out.println(a);

probeer dat maar eens ;-)

Of werk met, zoals de guidelines voor efficiente code zeggen, een StringBuffer.
StringBuilder wordt correct gebruikt zoals jij het doet, maar het is niet nodig ene third-party klasse te gebruiken als je de extra functionaliteit ervan niet nodig hebt. Vervang StringBuilder (apache commons neem ik?) door StringBuffer uit de Java API en je code werkt ook.

Verder:
Je code is volledig static, wat tegen OO indruist. Je moet een public methode maken Galgje2() die je aanroept vanuit je static main: new Galgje2().
Van daaruit roep je de rest van de code aan, non-static privates.
Klassen zijn met hoofdletter.
Methodes en vars horen in het Engels te zijn, zodat ze later door iedereen begrepen kunnen worden. AFAIK programmeren enkel Fransen en Duisters soms nog in hun eigen taal.
probeer zoveel mogelijk aan de get/set/is/has/to regels de gehoorzamen in uw benamingen. Methoden zijn acties. Bvb
letterIngeven zou moeten zijn getIngegevenLetter of beter getLetterFromKeyboard()
Uw methodes hoeven niet perse werkwoorden te zijn, het mogen ook commandos zijn. OplossingTonen -> showSolution()

.Acku.

Legacy Member
O ja en je code is helemaal niet geinternationaliseerd, I18N :p (Resourcebundle met vertalingen!)

Als je enkel voor een taal schrijft dfan nog horen String literals in private klassevariabalen als constante. Vreemd genoeg bestaat er geen constante voor een whitespace (Char.WHITESPACE bvb), testen op tekst doe je normaal enkel via constantes

.Acku.

Legacy Member
MacK zei:
blijkbaar lag het probleem bij
clearConsole()

ditmaal is het geen for-lus van 800 , maar van 80 .. en nu zijn er geen probs :s

anyway, mijn probleem is opgelost, maar weet iemand waarom het mis ging? ik zou het graag ook begrijpen.

Het is moeilijk te identificeren wat er precies fout gaat, het is afhanjkelijk aan het platform waarop het programma draait. In uw geval komt het voor wanneer de console geen output meer aankan van uw programma, waarschijnlijk een soort van overflow in uw console, teveel lijnen in de buffer maybe?
Je flood echt wel met je output van 800 lijnen. 80 lijnen is beter maar is sowieso een lelijke manier om een cls() uit te voeren. However, het is vrij moeilijk te doen sowieso, tenzij je het DOS commando extern kan oproepen. Bvb met Runtime.exec(cls.com)

Unzip Attack

Legacy Member
.Acku. zei:
Of werk met, zoals de guidelines voor efficiente code zeggen, een StringBuffer.
StringBuilder wordt correct gebruikt zoals jij het doet, maar het is niet nodig ene third-party klasse te gebruiken als je de extra functionaliteit ervan niet nodig hebt. Vervang StringBuilder (apache commons neem ik?) door StringBuffer uit de Java API en je code werkt ook.

Verder:
Je code is volledig static, wat tegen OO indruist. Je moet een public methode maken Galgje2() die je aanroept vanuit je static main: new Galgje2().
Van daaruit roep je de rest van de code aan, non-static privates.
Klassen zijn met hoofdletter.
Methodes en vars horen in het Engels te zijn, zodat ze later door iedereen begrepen kunnen worden. AFAIK programmeren enkel Fransen en Duisters soms nog in hun eigen taal.
probeer zoveel mogelijk aan de get/set/is/has/to regels de gehoorzamen in uw benamingen. Methoden zijn acties. Bvb
letterIngeven zou moeten zijn getIngegevenLetter of beter getLetterFromKeyboard()
Uw methodes hoeven niet perse werkwoorden te zijn, het mogen ook commandos zijn. OplossingTonen -> showSolution()


zo als je in zijn post leest, lees je dat hij een beginner is in java (basis cursus java). Het is dus totaal onnodig om te beginnen over OO etc... In een basiscursus moet er iteratief geprogrammeerd worden en mag het woord OO eigenlijk helemaal niet vallen.
Zodus is zijn programma op dat vlak helemaal niet zo slecht aangepakt. Verder is 'stringbuffer' een totale overkill voor een beginner als hij en is een 'normale' string de beste oplossing in zijn geval. Btw de guidelines mogen nog zoveel zeggen, het uiteindelijke voordeel dat je daaruit haalt is zo goed als nihil en tmaakt uiteindelijk nix uit. Efficiente code kan je makkelijk op andere delen winnen. Maar ook efficientie past niet in een beginnerscursus, dat is een aandachtspunt voor later. Alles op zijn tijd, basis is namelijk enorm belangrijk...
Deel over naamgeving mag wel aandacht voor zijn op dit niveau...

.Acku.

Legacy Member
Unzip Attack zei:
zo als je in zijn post leest, lees je dat hij een beginner is in java (basis cursus java). Het is dus totaal onnodig om te beginnen over OO etc... In een basiscursus moet er iteratief geprogrammeerd worden en mag het woord OO eigenlijk helemaal niet vallen.
Zodus is zijn programma op dat vlak helemaal niet zo slecht aangepakt. Verder is 'stringbuffer' een totale overkill voor een beginner als hij en is een 'normale' string de beste oplossing in zijn geval. Alles op zijn tijd, basis is namelijk enorm belangrijk...

Hoezo, 'OO leer je toch op twee dagen'? :)

Btw de guidelines mogen nog zoveel zeggen, het uiteindelijke voordeel dat je daaruit haalt is zo goed als nihil en tmaakt uiteindelijk nix uit. Efficiente code kan je makkelijk op andere delen winnen. Maar ook efficientie past niet in een beginnerscursus, dat is een aandachtspunt voor later.

Wat eigenlijk zoveel zegt als 'ik veeg er mijn voeten aan'. Schrijf jij jouw soort van code maar gerust, maar liefst ver weg van die van mij.

Bubbling Zombie

Legacy Member
Unzip Attack zei:
zo als je in zijn post leest, lees je dat hij een beginner is in java (basis cursus java). Het is dus totaal onnodig om te beginnen over OO etc... In een basiscursus moet er iteratief geprogrammeerd worden en mag het woord OO eigenlijk helemaal niet vallen.
Zodus is zijn programma op dat vlak helemaal niet zo slecht aangepakt. Verder is 'stringbuffer' een totale overkill voor een beginner als hij en is een 'normale' string de beste oplossing in zijn geval. Btw de guidelines mogen nog zoveel zeggen, het uiteindelijke voordeel dat je daaruit haalt is zo goed als nihil en tmaakt uiteindelijk nix uit. Efficiente code kan je makkelijk op andere delen winnen. Maar ook efficientie past niet in een beginnerscursus, dat is een aandachtspunt voor later. Alles op zijn tijd, basis is namelijk enorm belangrijk...
Deel over naamgeving mag wel aandacht voor zijn op dit niveau...

ik ben wel geneigd om hem gelijk te geven: zo leer je slechte manieren aan, iets waar je moeilijker vanaf geraakt :)

MacK

Legacy Member
allereerst, bedankt voor de vele feedback.
En vooral juiste feedback. Ik ken inderdaad weinig tot niets van het concept OO, en ook m'n programmeerervaring is niet erg uitgebreid.
Ik was gewoon wat aan het knutselen met java :)
Maar kheb uiteindelijk toch nog m'n galgje afgekregen..

Het druist misschien in tegen al die principes die jullie kennen, maar kvind het gewoon tof om een 'afgewerkt' product gemaakt te hebben, met weinig tot geen hulp (buiten wat ik lees).

Maar kvind het wel interessant dat programmeren, kben zelf al begonnen met 4 op een rij , in een console versie tenminste.. Nog zo'n 'knutselwerkje', dat momenteel al toelaat om met twee tegen elkaar te spelen, en ook te detecteren of er 4 op een rij is...

Maar kdenk dat ik toch één der deze dagen een boek ga kopen over C++. Ik vind het wel tof om zo dingetjes te maken, maar kwil het ook op een correcte manier aanleren.. En ik vermoed dat de cursus van op school niet zo denderend uitgebreid is..

Ps : denken jullie dat dat problemen gaat opleveren, als ik op school Java aanleer, en thuis dan me bezig houdt met C++ (of een andere taal)?

Tyfius

Legacy Member
Meestal krijg je op school (wij toch, en hoor van anderen ook) eerst wat C en C++, of VB(.NET) om lineair te leren programmeren, en stilletjesaan over te schakelen naar een OO taal, hier dus Java.
Niet dat C++ daarom minder is kwa OO, maar Java is een pak eenvoudiger kwa GUI en snel resultaat, dat is de voornaamste reden waarom daar in scholen wordt voor gekozen.

Zeker in het begin ga je moeten opletten kwa syntax en denkwijzen die soms nogal is kunnen verschillen tussen C++ en Java, en als je beiden leert zou dat wel eens voor problemen kunnen zorgen.

Probeer anders ook eerst C++ op een lineaire manier te gebruiken, en als je adhv java de OO concepten wat doorhebt, of het staat vrij goed in het boek uitgelegd je daar eens op te concentreren.
Verwacht niet dat alles van een leien dakje zal lopen, maar geef zeker niet op als de verschillen tussen beiden talen te moeilijk worden om uit elkaar te houden. Kennis van een extra taal kan zeker geen kwaad, en kan soms handig zijn om dingen beter te begrijpen. Ik denk tijdens het programmeren in C# of Java dikwijls terug aan C++ en PHP hoe ik daar iets al dan niet object georienteerd zou aanpakken.

.Acku.

Legacy Member
MacK zei:
allereerst, bedankt voor de vele feedback.
En vooral juiste feedback. Ik ken inderdaad weinig tot niets van het concept OO, en ook m'n programmeerervaring is niet erg uitgebreid.
Ik was gewoon wat aan het knutselen met java :)
Maar kheb uiteindelijk toch nog m'n galgje afgekregen..

Het druist misschien in tegen al die principes die jullie kennen, maar kvind het gewoon tof om een 'afgewerkt' product gemaakt te hebben, met weinig tot geen hulp (buiten wat ik lees).

Maar kvind het wel interessant dat programmeren, kben zelf al begonnen met 4 op een rij , in een console versie tenminste.. Nog zo'n 'knutselwerkje', dat momenteel al toelaat om met twee tegen elkaar te spelen, en ook te detecteren of er 4 op een rij is...

Maar kdenk dat ik toch één der deze dagen een boek ga kopen over C++. Ik vind het wel tof om zo dingetjes te maken, maar kwil het ook op een correcte manier aanleren.. En ik vermoed dat de cursus van op school niet zo denderend uitgebreid is..

Ps : denken jullie dat dat problemen gaat opleveren, als ik op school Java aanleer, en thuis dan me bezig houdt met C++ (of een andere taal)?

Je bent even enthousiast als ik ooit was toen ik begon te programmeren :) Hoger Lager in console, de verwezenlijking! :)
Was ooit verheugd dat ik een leeg venstertje met mijn naam op kon doen verschijnen. Ik schreef SLOTS ooit zonder een extra methode (wist nog niet hoe) alles in een grote if constructie in de paint methode.

Als je andere taal wilt (vraag is wel waarom?) ga dan naar C# en niet C++. De C# wereld zit iets simpeler in elkaar dankzij de goede staandaard libs, en als je dus zaken gaat opzoeken vind je ook dezelfde oplossingen ipv tinetallen manierne om hetzelfde te doen.
Java GUI is ook bets mogelijk, zie tools als Eclipse, Azareus en euh LimneWire(ok, LimeWire is niet het beste voorbeeld). Toen ik Azareus gebruikte wist ik niet eens dat het in Java was, wat bewijst dat je wel deglijk snelle applicaties kan ontwerpen erin.

Unzip Attack

Legacy Member
.Acku. zei:
Hoezo, 'OO leer je toch op twee dagen'? :)
natuurlijk, het basisconcept (belangrijkste) leer je op 2 dagen. maar iemand die nog niet fatsoenlijk imperatief kan programmeren, moet nog niet eens DENKEN aan OO programmeren. Een fout die heel veel hogescholen maken, door terwijl ze C zien ook C++ ofzo te geven, puur als 2 afzonderlijke talen die mogelijkheden hebben. Concepten ? forget it... :/


.Acku. zei:
Wat eigenlijk zoveel zegt als 'ik veeg er mijn voeten aan'. Schrijf jij jouw soort van code maar gerust, maar liefst ver weg van die van mij.
mijn soort code wordt TOEVALLIG door 95% van de programmeurs gebruikt, die 'standaard'-freaks verliezen veel te veel tijd door dat minitieus gedoe waar ze 0.0000 mee winnen... Same for webdesign, waar er een hoop zitten te geilen op die standaarden die goed zijn voor 1 op 1 000 000 mensen die hun kutbrowsertje een lijntje niet goed toont...
Wie zegt dat "String" gebruiken verkeerd is, is in mijn ogen gewoon verkeerd bezig...


@ MacK : ik zou zeggen volg je Java cursus goed, en begin zeker niet met een OO taal tegelijk te leren, dat brengt meer verwarring dan wat anders... Wat je wel kan doen is bijvoorbeeld C# of C te leren maar (voor C#) zonder de OO principes...

.Acku.

Legacy Member
tot je iemand hebt die programmeert:
for (int a=0;a<9999;a++) {
myString = " "+myString+a;
}

Zo 40.000 nutteloze objecten creeerend (ik heb het niet eens opver een app met degelijke database, dat zou op miljoenen kunnen uitdraaien) op de heap, om dan te klagen dat Java traag is

QplQyer

Legacy Member
mijn soort code wordt TOEVALLIG door 95% van de programmeurs gebruikt, die 'standaard'-freaks verliezen veel te veel tijd door dat minitieus gedoe waar ze 0.0000 mee winnen... Same for webdesign, waar er een hoop zitten te geilen op die standaarden die goed zijn voor 1 op 1 000 000 mensen die hun kutbrowsertje een lijntje niet goed toont...
Webstandaarden vergelijken met codeconventies is wel een prachtig voorbeeld van appelen en peren vergelijken ...
In het ene geval zijn het mensen die het wat moeilijker hebben met het te begrijpen (maar dat is overkombaar), in het andere geval zijn het machines, dingen die niet met iets overweg kunnen als het niet volgens de standaard is opgebouwd.
Standaarden zijn uitermate belangrijk, zonder al die afspraken zou het verdorie irritant zijn (je moet maar eens kijken hoe beu het is om op reis die andere stopcontacten tegen te komen zonder een adapter bij te hebben).
Maar ja, (de slechte, enkel aan MS zijn browsertje denkende) webdesigners kunnen dat moeilijk vatten blijkbaar ja.

Over het gebruik van conventie, wel het is een conventie, zonder die conventie werkt alles nog maar is het wel moeilijker om in een project te duiken, wat een niet te onderschatten iets is.

@TS: misschien beter om je voor de moment met Java verder bezig te houden, als je Java beheerst, zal naar C++ overstappen zeker redelijk goed gaan, maar twee programmeertalen tegelijk leren is niet aan te raden (focussen op 1 ding tegelijk is redelijk het beste, hoe moeilijk het soms ook is ;)).

Unzip Attack

Legacy Member
QplQyer zei:
Webstandaarden vergelijken met codeconventies is wel een prachtig voorbeeld van appelen en peren vergelijken ...
In het ene geval zijn het mensen die het wat moeilijker hebben met het te begrijpen (maar dat is overkombaar), in het andere geval zijn het machines, dingen die niet met iets overweg kunnen als het niet volgens de standaard is opgebouwd.
Standaarden zijn uitermate belangrijk, zonder al die afspraken zou het verdorie irritant zijn (je moet maar eens kijken hoe beu het is om op reis die andere stopcontacten tegen te komen zonder een adapter bij te hebben).
Maar ja, (de slechte, enkel aan MS zijn browsertje denkende) webdesigners kunnen dat moeilijk vatten blijkbaar ja.

Over het gebruik van conventie, wel het is een conventie, zonder die conventie werkt alles nog maar is het wel moeilijker om in een project te duiken, wat een niet te onderschatten iets is.

Het ging hier niet om conventies die mensen moeten begrijpen, wel over code die zogezegd sneller is, nl. gebruik van Stringbuffer ipv String.
Dat heeft in mijn ogen geen zak te maken met code die moeilijker leesbaar wordt.
Webstandaarden vergelijken met guidelines voor efficiente code is niet compleet hetzelfde maar heeft toch enige vergelijking. Ze worden namelijk door hogere instantie ingeroepen maar door weinigen compleet aanvaard.

.Acku.

Legacy Member
Ben jij diegene die nog op school zit zonder professionele ervaring? Ja toch?

killgore

Legacy Member
n/o, maar ik vraag me af wa gulle zit te kreften over String & StringBuffer. Qua gebruik zijn ze vrij evenwaardig, maar qua snelheid & geheugengebruik is StringBuffer zwaar de meerdere, daar kunde toch gewoonweg niet omheen :s???

Moesten jullie alle tijd die jullie hier besteden aan discussiëren in programmeren steken, windows vista was allang geprogd :p.
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