Confirm Quit problemer (console application)

Tags:    c#

<< < 12 > >>
Oy!

Jeg har skrevet et lille (stenet) spil, og det virker som sådan godt nok. Mit største problem er, at når jeg vil lukke spillet, så vil jeg tjekke om man har skrevet "yes" eller "no" i en string, eller om man har skrevet noget helt andet.. Jeg har foreløbigt gjort således:

Fold kodeboks ind/udKode 


"GetRandomNumber" er starten af mit program..

Nogle gange virker det første gang, andre gange (hvis jeg fx har 'spillet' en gang) skal jeg skrive "yes" 3-4 gange, hvorefter programmet måske starter forfra alligevel..

så mine spørgsmål er:
1) Hvad er det der går galt?
2) Er der en anden, nemmere måde?



Oy!

Jeg har skrevet et lille (stenet) spil, og det virker som sådan godt nok. Mit største problem er, at når jeg vil lukke spillet, så vil jeg tjekke om man har skrevet "yes" eller "no" i en string, eller om man har skrevet noget helt andet.. Jeg har foreløbigt gjort således:

Fold kodeboks ind/udKode 


"GetRandomNumber" er starten af mit program..

Nogle gange virker det første gang, andre gange (hvis jeg fx har 'spillet' en gang) skal jeg skrive "yes" 3-4 gange, hvorefter programmet måske starter forfra alligevel..

så mine spørgsmål er:
1) Hvad er det der går galt?
2) Er der en anden, nemmere måde?

Der er 2 ting du bør gøre.

1. Ryd op i dine ifs og else
Hvis du vil se om man har skrevet "yes" er der ingen grund til at tjekke om man ikke har skrevet nej for det er en selvfølge så. Dermed kan du fjerne det yderste lag af if's. Her i pseudokode:
Fold kodeboks ind/udKode 


2. Du bør bruge metoden equals i stedet for ==. Equals tjekker om indholdet af strengene er lig med hinanden og ikke om de den samme.

Samlet set ville det komme til at se sådan her ud:

Fold kodeboks ind/udKode 


Syntes du burde kigge på hvordan man laver sine egne metoder og så kalde dem i stedet for at bruge "goto's".



Indlæg senest redigeret d. 13.01.2010 17:42 af Bruger #14645
takker :)

Havde ikke helt forstået hvordan man brugte "else if"...

Hvad er forskellen på at bruge ".equals()" og "=="?? kan du komme med et eksempel på, hvornår ".equals()" vil give et andet (og bedre) resultat? Bare så jeg har lettere ved at forstå hvorfor equals er bedre end ==...

hvordan starter man en metode "forfra" inde i metoden? Jeg bruger skam metoder, men jeg har jo brug for 'loop'-effekten..



Årsagen til at du skal bruge .equals() er fordi string er et objekt og ikke en "primitive". En primitiv er en meget simpel stykke data. Det kunne være f.eks.
int, float, double. Der findes vist nok også "objekt-versioner" af disse. Disse primitiver kan nemt sammenlignes med ==. F.eks. 4 == 4 eller 4 == 3. Problemet med string er som sagt at det er et objekt. I de fleste programmeringssprog flytter/kopier man ikke hele objektet (dvs. alt dets data) rundt. I stedet har den et plads i hukommelsen. Det er denne plads i hukommelsen man bruger. Dette kaldes en reference. Når du så spørger om streng1 == streng2 spørger du virkelig om de har den samme reference. Dvs. om det er den samme streng. I dit tilfælde er det ikke det du ønsker. Du ønsker at tjekke om indholdet af de to streng-objekter er det samme (deres tekst). Hertil har man metoden der hedder equal(). Det den gør er at tage indholdet af streng1-objektet og sammenligne med indholdet af streng2-objektet.

Det kan godt være lidt svært at forklare (for mig i hvertfald). En anden måde at se det på kunne være en nummerplade. Du kan nemt se om to "primitive" er lig med hinanden. F.eks. det intet problem at svare på 56 == 56. Forestil dig nu der var 2 nummerplader du ville sammenligne. Hvis du bruger == spørger du om de 2 er den samme nummerplade. Hvis du bruger equals() spørger du om tallene og bogstaverne på nummerpladerne er de samme.

Der er forskellige måder at lave det med metoden. Jeg programmerer normalt ikke i C# så det kan være du selv skal ændre lidt på det. I stedet for at gøre det på følgende måde kan du lave en metode som finder ud af om brugeren vil afslutte

Fold kodeboks ind/udKode 


Og så i stedet højere oppe i din kode tjekker du om bruger vil afslutte:
F.eks:
Fold kodeboks ind/udKode 

At lave det om til at bruger metoder vil kræve nogle ændringerne nogle steder. Men jeg fraråder dig at fortsætter med at bruge GOTO. GOTO er noget man bruger i mere lav-niveau sprog og tror mange vil være enige med mig i at det er ikke noget man bør bruge i et moderne højniveau sprog som C#.

Håber det gav lidt indsigt. Spørgs løs hvis der er mere eller noget du vil have uddybet.




Søren har ret i det, han siger om == og Equals. Der er dog en undtagelse med string, her sammenligner == indholdet.

http://msdn.microsoft.com/en-us/library/362314fe%28VS.71%29.aspx




tak :)

Det var meget uddybende :)..

Jeg har nu lavet stort set alle mine something: om til metoder :), og det virker fint..

Hvis jeg nu får flere problemer med samme program, skal jeg så 'bare' spørge i denne tråd, eller lave en ny? Tråden hedder jo Confirm Quit problemer...



tak :)

Det var meget uddybende :)..

Jeg har nu lavet stort set alle mine something: om til metoder :), og det virker fint..

Hvis jeg nu får flere problemer med samme program, skal jeg så 'bare' spørge i denne tråd, eller lave en ny? Tråden hedder jo Confirm Quit problemer...

Det mest korrekte ville nok være at starte en ny tråd. På den måde kan andre der senere søger på forummet med samme problem eller lignende nemmere finde en potentiel løsning. Hvis du har mange spørgsmål, selvom de ikke er helt det samme ville det bedste nok være at lave dem under en tråd så der ikke er oprettet 5 lige efter hinanden af den samme person.



Der er slet ingen grund til at bruge .Equals() i stedet for == i dette eksempel. Spild af tid.


Oy!

Jeg har skrevet et lille (stenet) spil, og det virker som sådan godt nok. Mit største problem er, at når jeg vil lukke spillet, så vil jeg tjekke om man har skrevet "yes" eller "no" i en string, eller om man har skrevet noget helt andet.. Jeg har foreløbigt gjort således:

Fold kodeboks ind/udKode 


"GetRandomNumber" er starten af mit program..

Nogle gange virker det første gang, andre gange (hvis jeg fx har 'spillet' en gang) skal jeg skrive "yes" 3-4 gange, hvorefter programmet måske starter forfra alligevel..

så mine spørgsmål er:
1) Hvad er det der går galt?
2) Er der en anden, nemmere måde?


Din kode er lidt ulogisk, men okay, jeg har mødt værre eksempler.

Var engang en der ikke kunne finde en funktion til ikke at gøre noget.

Noget ala:
Fold kodeboks ind/udKode 





Du kunne bla. a. bruge en switch:
Fold kodeboks ind/udKode 



eller en else if:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 14.01.2010 21:59 af Bruger #1927
Oy!

Siden min tråd nu hedder Confirm Quit problemer, så kan dette her vel også komme med:

Når jeg gerne vil lukke programmet, bruger jeg "Enviroment.Exit(0);" til at lukke det med..

1) Hvad skal "0" bruges til?
2) Er der nogen grund til at jeg ikke burde bruge Enviroment.Exit(0)?
3) Hvis ja, hvordan bør jeg så lukke programmet?



Oy!

Siden min tråd nu hedder Confirm Quit problemer, så kan dette her vel også komme med:

Når jeg gerne vil lukke programmet, bruger jeg "Enviroment.Exit(0);" til at lukke det med..

1) Hvad skal "0" bruges til?
2) Er der nogen grund til at jeg ikke burde bruge Enviroment.Exit(0)?
3) Hvis ja, hvordan bør jeg så lukke programmet?


Environment.Exit() afslutter programmet og returnérer en fejl-kode til operativ systemet.

0 betyder at alt gik glat, og er den kode du normalt skal bruge, med mindre du selvfølgelig har en grund til at bruge et andet.


Du kan også bruge Application.Exit(), hvilket jeg normalt bruger, da den ikke bare tvinger programmet ned.

Forskellen er at Environment.Exit() tvinger programmet til at lukke, mens Application.Exit() fortæller alle Message Pumps om at afslutte først.



Application.Exit():
Informs all message pumps that they must terminate, and then closes all application windows after the messages have been processed. This method stops all running message loops on all threads and closes all windows of the application. This method does not force the application to exit.


Environment.Exit():
Terminates this process and gives the underlying operating system the specified exit code.




Indlæg senest redigeret d. 19.01.2010 15:01 af Bruger #1927
skal jeg inkludere noget specielt for at bruge Application.Exit()?

(inkludere: "using ...")

Jeg kan ikke "finde" den..



<< < 12 > >>
t