Thread: [PROG][C#] Door elkaar smijter
-
22-09-2007, 15:58 #1Member
- Registered
- 23/12/06
- Location
- België
- Posts
- 4,177
- iTrader
- 24 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/33
[PROG][C#] Door elkaar smijter
Ik wil dus een prog schrijven waar ik een woord invoer en dat dan door elkaar wordt geschud. Ik programeer nog nie zo lang in C#.
Maar we moesten met random r = new random werken en als ge een letter uithaald hem verwijderen/markeren zodat hij geen twee keer wordt gebruikt.
Dus den input zal wel het woord zijn en in de class wordt hij door elkaar geschud en de output is dan het door elkaar geschudde woord.
Maar ik heb geen idee hoe ik er aan moet beginnen.
VB: thuis ==> sutihno votes
-
-
22-09-2007, 16:28 #2Crew Member
- Registered
- 01/09/02
- Location
- Peutie
- Posts
- 7,664
- iTrader
- 0
- Mentioned
- 4 Post(s)
- Reputation
- 13/105
Ge genereert een random nummer tussen 0 en de lengte van uwe string. Dan hebt ge voor het String object in .NET een aantal functies. IndexOf haalt een character op op een opgegeven positie in de string (dus uw random getal), Remove(int, int) verwijderd een character op de opgegeven plaats. De string waarmee ge gestart zijt bevat 1 character minder en ge berekend opnieuw de lengte en een random getal tot de lengte van uwe string gelijk is aan 0.
no votes
-
22-09-2007, 16:52 #3Member
- Registered
- 23/12/06
- Location
- België
- Posts
- 4,177
- iTrader
- 24 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/33
Als je thuis hebt dan is de positie van bv i 4 maar wat moet ge dan gebruiken als 2de int?
no votes
-
22-09-2007, 17:08 #4
http://search.msdn.microsoft.com/sea...ing.remove&sr=
best zo snel mogelijk met MSDN leren werken
searchen doe je door Klasse.methode of gewoon algemene termen
de tweede int is in feite niet nodig als je maar 1 char wilt removenno votes
-
22-09-2007, 17:44 #5Crew Member
- Registered
- 01/09/02
- Location
- Peutie
- Posts
- 7,664
- iTrader
- 0
- Mentioned
- 4 Post(s)
- Reputation
- 13/105
Dat zou 1 moeten zijn.
Daaruit maak ik op: van positie X tot en met het einde van de string.String.Remove (Int32)
Deletes all the characters from this string beginning at a specified position and continuing through the last position.
dus: m_string.Remove(random_number, 1); zou het uiteindelijke resultaat moeten worden.String.Remove (Int32, Int32)
Deletes a specified number of characters from this instance beginning at a specified position.no votes
-
22-09-2007, 18:12 #6Member
- Registered
- 23/12/06
- Location
- België
- Posts
- 4,177
- iTrader
- 24 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/33
K bedankt nu zal het wel lukken.

En we hebben nog niets over MSDN geleerd.
kzal mss wa zelfstudie doen
no votes
-
22-09-2007, 22:31 #7Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Da is voor een lijst, voor een string is het analoog.Code:private void shuffleStringList(List<String> list) { Random randomNumber = new Random(); String temp; for ( int i = 0; i < list.Count; i++ ) { int j = randomNumber.Next( list.Count); // Swap temp = list[i]; list[i] = list[j]; list[j] = temp; } }no votes
-
22-09-2007, 22:47 #8Member
- Registered
- 23/12/06
- Location
- België
- Posts
- 4,177
- iTrader
- 24 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/33
k kzal dit dan ook eens proberen.
no votes
-
22-09-2007, 23:48 #9Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Ik lees juist dat het blijkbaar voor school was, normaal geef ik dan geen kant en klare code, ma soit, ge moet hem zelf toch al gaan omvormen en begrijpen, dus zo erg is het niet.
Tis vrij straightforward eigenlijk & snel genoeg (lineaire tijd).no votes
-
23-09-2007, 01:06 #10Member
- Registered
- 21/10/05
- Location
- Herentals
- Posts
- 1,515
- iTrader
- 5 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/13
Ik verveelde mij dus hier is mijn versie. Het principe: knip een letter op een willekeurige plaats uit de inputstring en plak die aan de outputstring (al moet je in de code wel eerst plakken en dan pas knippen).
Code:using System; namespace TestApp { public class CharShuffler { public static void Main() { string input = ""; while (input.ToLower() != "q") { Console.Write("type a word or q to quit: "); input = Console.ReadLine(); Console.WriteLine(Shuffle(input)); Console.WriteLine(); } } public static string Shuffle(string input) { string output = ""; Random rnd=new Random(); while(input.Length>0) { int copyfrom = rnd.Next(input.Length); output+= input[copyfrom]; input=input.Remove(copyfrom, 1); } return output; } } }no votes
-
23-09-2007, 20:49 #11Member
- Registered
- 23/12/06
- Location
- België
- Posts
- 4,177
- iTrader
- 24 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/33
progje zojuist geschreven en het werkt perfect. Allemaal bedankt.
Kheb dit geschreven in mijn class:
Code:class Mixer { string woord = ""; public Mixer (string woord) { this.woord = woord; } public string DoorElkaar { get { string MixWoord = ""; Random rnd = new Random(); while (woord.Length > 0) { int letter = rnd.Next(woord.Length); MixWoord += woord[letter]; woord = woord.Remove(letter, 1); } return MixWoord; } }no votes
-
24-09-2007, 00:55 #12
Ben je wel zeker dat het de bedoeling is om het met een access modifier te doen?
persoonlijk gebruik ik dat nooit voor zo'n doeleinden, kan natuurlijk wel zijn dat ik het mis heb
(C# ken ik door zelfstudie)
no votes
-
24-09-2007, 02:38 #13Member
- Registered
- 21/10/05
- Location
- Herentals
- Posts
- 1,515
- iTrader
- 5 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/13
Access modifiers zijn private en public enzo en op dat gebied zie ik hier niets verkeerd aan. Bedoelde je misschien het gebruik van die property? Daar zet ik bijna nooit zo'n functie in. In dit geval zou ik van die propertie een gewone public method maken vooral omdat die functie om letters te verwisselen geen "eigenschap" van het object is maar iets dat het object kan doen.
(eveneens C# zelfstudie)no votes
-
24-09-2007, 10:07 #14Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Je gaat zoiets enkel in een property zetten als het elke keer dat het moet opgehaald worden geshuffled worden. Anders maak je 1 shuffle functie & een property om die geshufflede versie op te halen. imho
no votes
-
24-09-2007, 16:58 #15
yep, volledig mee eens. Je klasse Mixer zou eigenlijk alleen de functie DoorElkaar mogen bevatten. Een andere klasse zou die dan kunnen oproepen (eventueel static)
woord = Mixer.DoorElkaar(woord);Uzghul, 70 Rogue; Tankghul, 70 Warrior; Uziuz, 70 Paladin; Skinny, 70 Priest; Darkrune, 70 Warlock; UniKorn, 60 Druid; Martinuz, 59 Hunter; Marceluz, 59 Mage; Flexy, 30 Rogue;no votes

