0

私は単語をスクランブルするためのコードを書きます私は単純なゲームのごちゃ混ぜを作成しています

         string jumble = theWord;
         int length = jumble.Count();
         for (int i = 0; i < length; ++i)
         {
             int index1 = (rand.Next() % length);
             int index2 = (rand.Next() % length);

             char  temp =jumble[index1];
             jumble = jumble.Replace(jumble[index1], jumble[index2]);
             jumble = jumble.Replace(jumble[index1], temp);

         }

コードを更新する

         string jumble = theWord;
         int length = jumble.Count();
         for (int i = 0; i < length; ++i)
         {
             int index1 = (rand.Next() % length);
             //int index2 = (rand.Next() % length);

         char temp = jumble[index1];
         jumble[i] = jumble[index1 - 1];
         jumble[i] = temp;

         }

エラー1プロパティまたはインデクサー'string.this[int]'を割り当てることができません-読み取り専用です

4

3 に答える 3

5

順列の明確さと良好な分布の両方のためにこれを使用します(おそらくパフォーマンスのため):

public static class Ext
{
    private static Random rand = new Random();

    public static string Shuffle(this String str)
    {
        var list = new SortedList<int,char>();
        foreach (var c in str)
            list.Add(rand.Next(), c);
        return new string(list.Values.ToArray());
    }
}
  • 他の答えについての注意:1つは大きく偏っていて、もう1つはすべての可能なシャッフルを提供しません。あなたがこの種のものを気にしないのであれば、これらは有効な答えです。
于 2012-11-12T05:28:02.787 に答える
4
         StringBuilder jumbleSB = new StringBuilder();
         jumbleSB.Append(theWord);
         int lengthSB = jumbleSB.Length;
         for (int i = 0; i < lengthSB; ++i)
         {
             int index1 = (rand.Next() % lengthSB);
             int index2 = (rand.Next() % lengthSB);

             Char temp = jumbleSB[index1];
             jumbleSB[index1] = jumbleSB[index2];
             jumbleSB[index2] = temp;

         }

         Console.WriteLine(jumbleSB);
    }
于 2012-11-12T04:56:19.930 に答える
2
var jumble = new StringBuilder("theWord");
int length = jumble.Length;
var random = new Random();
for(int i=length-1; i>0; i--)
{
    int j = random.Next(i);
    char temp = jumble[j];
    jumble[j] = jumble[i];
    jumble[i] = temp;
}
Console.WriteLine(jumble);
于 2012-11-12T05:10:22.987 に答える