2016-11-04 2 views
-2

タイトルは説明的ではないかもしれませんが、私と一緒にいてください。 これはどのようにブーブレソートのようになるはずです:私は誤ってこのようにそれを書いたしかしどのように泡立てる? | C#

string s = Console.ReadLine(); 
StringBuilder sb = new StringBuilder(s); 
     for (int i = 0; i < sb.Length; i++) 
     { 
      for (int j = 0; j < sb.Length - 1; j++) 
      { 
       if (sb[j] > sb[j + 1]) 
       { 
        char tmp = sb[j]; 
        sb[j] = sb[j + 1]; 
        sb[j + 1] = tmp; 
       } 
      } 
     } 
     s = sb.ToString(); 
     Console.WriteLine(s); 

と、この作業は、私は、少なくともindexOutOfRange例外を取得するべきではありませんされて、なぜ私は知らないのですか? - >

string s = Console.ReadLine(); 
      StringBuilder str = new StringBuilder(s); 

      for (int i = 0; i < s.Length; i++) 
      { 
       for (int j = 0; j < str.Length; j++) 
       { 
        if (str[i] < str[j]) 
        { 
         var tmp = str[j]; 
         str[j] = str[i]; 
         str[i] = tmp; 
        } 
       } 
      } 

      s = str.ToString(); 
      Console.WriteLine(s); 

これを明確にするために、アルファベット順に単語の文字を並べます。

+1

インデックスは、2番目のバージョンでは常に範囲内にあります。 'i'と' j'だけを使い、 'Length'よりも常に小さくなります。これは' StringBuilder'の文字列とそのコピーの両方で同じです。なぜあなたは例外を期待しますか? –

+2

''なぜこのコードが動作するのですか? ''の質問に対して、 ''デバッグヘルプを求める質問(なぜこのコードは動作しませんか?)」の引数のほとんどまたはすべてが有効です。だから、私は閉じようとしている。ところで、これはおそらく最初の "なぜこのコードが動作するのですか?" – fvu

答えて

0

あなたの最初のアプローチでは、j0からLength - 1に行って、文字を比較するときには、続けて1を追加しました。

2つ目の方法では、j0からLengthに変更しましたが、文字を比較すると1は追加されませんでした。

これらの両方の方法が同じように動作することを確認してください。例外もありません。