jeIIy Skrevet 5. februar 2012 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?
Jassogitt Skrevet 5. februar 2012 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
GeirGrusom Skrevet 5. februar 2012 Skrevet 5. februar 2012 Tankegangen din er litt rar. Istedet for å sjekke hva teksten er, så sjekker du heller hva den ikke er?
jeIIy Skrevet 5. februar 2012 Forfatter 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
Ayb Skrevet 5. februar 2012 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
jeIIy Skrevet 5. februar 2012 Forfatter 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
GeirGrusom Skrevet 5. februar 2012 Skrevet 5. februar 2012 Du må gjøre en case-insesnstivie sammenligning. if(sRace.Equals("protoss", StringComparison.CurrentCultureIgnoreCase))
jeIIy Skrevet 5. februar 2012 Forfatter 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
GeirGrusom Skrevet 6. februar 2012 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.
torbjørn marø Skrevet 6. februar 2012 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ø
GeirGrusom Skrevet 6. februar 2012 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.
wolf5 Skrevet 6. februar 2012 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
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å