jeIIy Skrevet 5. februar 2012 Del Skrevet 5. februar 2012 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.Write("Enter Race: "); string sRace = Console.ReadLine(); if (sRace != "Protoss") { Console.WriteLine("That is not a Starcraft race!"); } else if (sRace != "Zerg") { Console.WriteLine("That is not a Starcraft Race!"); } else if (sRace != "Terran") { Console.WriteLine("That is not a Starcraft Race!"); } if (sRace = "Protoss") { Console.WriteLine("Strategy"); } Console.WriteLine("Press Enter to terminate..."); Console.Read(); } } } Skal lage et enkelt program hvor brukeren setter inn navn på en rase i sc2, så vil den gi ut forskjellige strategier. Problemet er at jeg ikke vet helt hvordan jeg skal sette det opp. Når jeg skriver inn Protoss så kommer det ikke Strategy opp, og jeg kan tenke meg litt hvorfor. siden jeg har satt : else if (sRace != "Terran") så sier den bare når jeg skriver inn Terran? Lenke til kommentar
Jassogitt Skrevet 5. februar 2012 Del Skrevet 5. februar 2012 (endret) Et eksempel på hvordan du kan sette det opp: if (sRace == "Protoss" || sRace == "Zerg" || sRace == "Terran") { Console.WriteLine("Strategy for " + sRace + ": "); } else { Console.WriteLine("That is not a Starcraft Race!"); } Slik du hadde det ville testen feile uansett hva du skrev inn, pluss at den siste if-setningen mangler en '='. Endret 5. februar 2012 av Jassogitt Lenke til kommentar
GeirGrusom Skrevet 5. februar 2012 Del Skrevet 5. februar 2012 Tankegangen din er litt rar. Istedet for å sjekke hva teksten er, så sjekker du heller hva den ikke er? Lenke til kommentar
jeIIy Skrevet 5. februar 2012 Forfatter Del Skrevet 5. februar 2012 (endret) Tankegangen din er litt rar. Istedet for å sjekke hva teksten er, så sjekker du heller hva den ikke er? tenkte først at programmet skulle sjekke om brukeren skrev inn en riktig rase takk for tipset Jassogitt alt ble plutselig veldig enkelt Endret 5. februar 2012 av jeIIy Lenke til kommentar
Ayb Skrevet 5. februar 2012 Del Skrevet 5. februar 2012 (endret) switch er vel bedre å bruke enn if her edit: men om det er for å lære deg if så blir det jo noe annet Endret 5. februar 2012 av Ayb Lenke til kommentar
jeIIy Skrevet 5. februar 2012 Forfatter Del Skrevet 5. februar 2012 (endret) switch er vel bedre å bruke enn if her edit: men om det er for å lære deg if så blir det jo noe annet har nettopp kommet til kapitlet med if, så jeg tester litt rundt der Edit: har et lite problem... Jeg må skrive Protoss med stor "P" hvis det skal funke, hvordan skal det funke med begge deler? Endret 5. februar 2012 av jeIIy Lenke til kommentar
GeirGrusom Skrevet 5. februar 2012 Del Skrevet 5. februar 2012 Du må gjøre en case-insesnstivie sammenligning. if(sRace.Equals("protoss", StringComparison.CurrentCultureIgnoreCase)) Lenke til kommentar
jeIIy Skrevet 5. februar 2012 Forfatter Del Skrevet 5. februar 2012 (endret) Du må gjøre en case-insesnstivie sammenligning. if(sRace.Equals("protoss", StringComparison.CurrentCultureIgnoreCase)) takk! er det noen måte jeg kan si at hele sRace variabelen bare skal ignorere case sensitiv? Endret 5. februar 2012 av jeIIy Lenke til kommentar
GeirGrusom Skrevet 6. februar 2012 Del Skrevet 6. februar 2012 Nei. sRace er av type System.String, og disse er immutable (dvs. du kan ikke endre innholdet etter objektet er opprettet). Det er mulig du kan endre CurrentCulture til å bli IgnoreCase, men det er ikke helt stuerent. Det du derimot kan gjøre, er å skrive en metode som gjør sammenligningen for deg, så slipper du å skrive det flere ganger. Men når det uansett bare er tre utfall ville jeg bare skrevet det samme flere ganger. Lenke til kommentar
torbjørn marø Skrevet 6. februar 2012 Del Skrevet 6. februar 2012 (endret) Jeg ville gjort noe sånn som dette: static void Main(string[] args) { var races = new[] { "Protos", "Zerg", "Terran" }; Console.Write("Enter Race: "); string sRace = Console.ReadLine(); if (races.Any(r => r.Equals(sRace, StringComparison.CurrentCultureIgnoreCase))) { // do your stuff } else { Console.WriteLine("That is not a Starcraft Race!"); } Console.WriteLine("Press Enter to terminate..."); Console.Read(); } Når du gjør det samme flere ganger finnes det alltid en bedre måte.. Endret 6. februar 2012 av torbjørn marø Lenke til kommentar
GeirGrusom Skrevet 6. februar 2012 Del Skrevet 6. februar 2012 Det er også mulig å bruke enumeration her: public enum Race { Protoss, Zerg, Terran } Race result; if(Enum.TryParse(sRace, true, out result)) { // Teksten som er skrevet inn er definert i enum-en, og vil ligge i result } På denne måten får du Enum-en til å være case-insensitive (det er det 'true' gjør) og samtidig slipper du å sammenligne strings i fremtiden, men istedet så er hver rase representert ved et integer. Lenke til kommentar
wolf5 Skrevet 6. februar 2012 Del Skrevet 6. februar 2012 (endret) takk! er det noen måte jeg kan si at hele sRace variabelen bare skal ignorere case sensitiv? Du har alltids mulighet til å jobbe helt med lowercase ved å sørge for å sette alle variablene til lowercase i utgangspunktet. Det hele går på preferanser på hvordan du liker å skrive det. Forskjellig utviklere har forskjellige preferanser på hva de synes ser best ut og er best. string sRace = Console.ReadLine().ToLower(); if (sRace == "protoss" || sRace == "zerg" || sRace == "terran") Alternativ kan du lage en string extension klasse for det: public static partial class StringExtensions { public static bool EqualsIgnoreCase(this string obj, string value) { if (obj == null) return (value == null); return obj.Equals(value, StringComparison.InvariantCultureIgnoreCase); } } string sRace = Console.ReadLine().ToLower(); if (sRace.EqualsIgnoreCase("Protoss") || sRace.EqualsIgnoreCase("Zerg") || sRace.EqualsIgnoreCase("Terran")) Mange måter å gjøre det på. Finn den måten du synes er best leselig og ryddig for deg og benytt den metoden. Endret 6. februar 2012 av wolf5 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå