Archief - [PROG][C#] Door elkaar smijter

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Shotterke

Legacy Member
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 ==> sutih

Tyfius

Legacy Member
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.

Shotterke

Legacy Member
Als je thuis hebt dan is de positie van bv i 4 maar wat moet ge dan gebruiken als 2de int?

Tyfius

Legacy Member
straatloper zei:
Als je thuis hebt dan is de positie van bv i 4 maar wat moet ge dan gebruiken als 2de int?
Dat zou 1 moeten zijn.

SMa zei:
de tweede int is in feite niet nodig als je maar 1 char wilt removen
String.Remove (Int32)
Deletes all the characters from this string beginning at a specified position and continuing through the last position.
Daaruit maak ik op: van positie X tot en met het einde van de string.

String.Remove (Int32, Int32)
Deletes a specified number of characters from this instance beginning at a specified position.

dus: m_string.Remove(random_number, 1); zou het uiteindelijke resultaat moeten worden.

Shotterke

Legacy Member
K bedankt nu zal het wel lukken. :p
En we hebben nog niets over MSDN geleerd. :s
kzal mss wa zelfstudie doen :D

killgore

Legacy Member
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;
            }
        }
Da is voor een lijst, voor een string is het analoog.

killgore

Legacy Member
straatloper zei:
k kzal dit dan ook eens proberen.:niceone:

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).

Albireo

Legacy Member
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;
        }
    }
}

Shotterke

Legacy Member
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;
            }
        }

SMa

Legacy Member
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 :p (C# ken ik door zelfstudie)

Albireo

Legacy Member
SMa zei:
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 :p (C# ken ik door zelfstudie)

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)

killgore

Legacy Member
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

UniKorn

Legacy Member
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);

Shotterke

Legacy Member
De leerkracht heeft er niets verkeerd of gezegt dus het maakt nie echt veel uit denk ik. :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan