Å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
private boolean verify_exit() {
boolean done = false;
boolean answer; //Svaret
while(!done) {
Console.WriteLine("Are you sure you want to quit? (yes/no)");
string YesNo = Console.ReadLine();
if (YesNo.ToLower().equals("yes")) {
done = true;
answer = true;
}
else if (YesNo.ToLower().equals("no")) {
done = true;
answer = false;
}
}
}
Og så i stedet højere oppe i din kode tjekker du om bruger vil afslutte:
F.eks:
if (verify_exit() == true) //Der behøves ikke == true delen.
End.Quit();
else
//Fortsæt, kald startSpil() eller hvad nu.
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.