2013-01-02 108 views
0

我該如何檢查數字是否增加? 123456-真正 423659假檢查數字是否增加?

我嘗試

while (newNumber != 0) 
     { 

      string a = newNumber.ToString().Substring(0, 1); 
      string b = newNumber.ToString().Substring(0, 2); 

      input1 = Convert.ToInt32(a); 
      input2 = Convert.ToInt32(b); 

      if (input1 < input2) 
      { 
       ////how do i increase substring a&b +1 ? 

      } 

     } 

    } 

另外,我怎麼能做到這一點,而不子方法?

+5

檢查排序數字是否更改數字。 – Blender

+3

聞起來像功課。 –

+0

如果下一位數字較少,則返回false,否則退出循環並且爲true。 – kenny

回答

0

你可以看到字符串中的索引爲i的元素是否大於元素i-1(對於索引在1中的每個元素)。

0

您可以使用此LINQ鏈。 asc1asc2是布爾值,第一個是true,第二個是false。鏈的作用是檢查索引字符數量是否等於零,或者索引是否大於零,但仍然大於前一個字符的長度等於字符串的長度。它不解析字符,因爲假設字符串只是數字,它們的ASCII值將落在30到39的範圍內,因此在檢查中仍然有效。

var s1 = "123456"; 
var s2 = "423659"; 
var asc1 = s1.Where((c, i) => i == 0 || c > s1[i - 1]).Count() == s1.Length; 
var asc2 = s2.Where((c, i) => i == 0 || c > s2[i - 1]).Count() == s2.Length; 
+0

+1對於在這個問題上使用Linq :) –

+0

-1在這個問題上使用Linq,因爲爲什麼你會這樣?這是不必要的難以閱讀和次優的性能。 – jevakallio

+0

我與@fencliff在這一個。我肯定贊成在任何有意義的地方使用Linq,但是這個特殊的例子很不明顯。你可以通過使用'.All()'和更清晰的lambda變量來使它更清晰。 – Bobson

1

你正在使用的方法不是一個很好的方法。首先,b總是比a大,因爲你將1和2送入長度函數,而不是位置。因此,例如,如果您採用數字12345,則a將​​爲1,b將爲12.另外,Substring方法在調用時計算,因此您無法在定義它之後修改參數,而無需再次調用Substring。可以這樣想:如果將一個方法的結果賦值給一個變量,那麼該方法必須計算出該結果,所以如果你想得到不同的結果,就必須重新計算它。但是,您根本不需要使用Substring方法。在C#中,可以通過索引來訪問字符串,因此您可以爲myString[0]指定第一個元素(請記住,C#中的索引是0索引的,因此第一項是索引0)。做你檢查什麼,你可以使用一個for循環,像這樣:

if (newNumber != 0) 
    { 

     string a = newNumber.ToString(); 

     for(int i = 1; i < a.Length; i++) 
     { 
      int input1 = Convert.ToInt32(a[i-1]); 
      int input2 = Convert.ToInt32(a[i]); 

      if (input1 >= input2) //Note the reversed condition 
      { 
       return false; //Gives the false result 

      } 
     } 
     return true; //Computation finished, so the number is increasing 
    } 

} 

此方法應該是快速的,並且做幾乎你想要什麼,如果我理解正確你的問題。另外,我不確定你爲什麼使用while循環,因爲你不會改變循環體中的「newNumber」,程序會循環計算直到停止它爲止。你應該使用if語句。 while循環會一遍又一遍地循環遍歷整個body,在每次開始計算之前測試條件,而if語句只運行一次。一般情況下,儘可能使用if語句,因爲while循環有可能無限期地運行(因爲你可以進入狀態永遠不會滿足的狀態,並且它只會永遠循環)。

2

沒有必要在stringint之間來回轉換數字。在C#中,字符串可作爲字符數組枚舉,並且字符之間可以相互比較:

bool IsIncreasing(int number) 
{ 
    string text = number.ToString(); 
    char previous = '0'; 

    foreach(char c in text) 
    { 
     if(c <= previous) 
      return false; 
     previous = c; 
    } 

    return true; 
} 
+0

如果'number'爲負數,則可以將'-''(負)與「0」進行比較。也可以在循環之前將'previous'初始化爲NUL字符('char.MinValue',也被稱爲''\ 0'')。 –

+0

啊好點。我在答案中忘記了這一點。這是一個很好的解決方案。 – Hoeloe