2016-11-04 140 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

您的索引始終在第二個版本的範圍內。你只使用'i'和'j',並且兩者總是小於'Length',這對StringBuilder中的字符串和它的拷貝是一樣的。你爲什麼期望有一個例外? –

+2

「尋求調試的問題的幫助(」爲什麼不是這個代碼工作?「)的大部分或所有參數都適用於這個」爲什麼這個代碼可以工作「的問題。所以,我正在投票結束。順便說一句,這可能是第一個「爲什麼這個代碼工作」的問題,我在這裏遇到這麼:) – fvu

回答

0

在您的第一個方法中,您將j0改爲Length - 1,並在比較字符時保留添加1

在第二種方法中,您使用j0Length,但在比較字符時未添加1

看到這兩種方式工作相同,你也不會例外。