2013-01-02 62 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