使用している方法はあまり良くありません。まず、位置ではなく長さ関数に1と2をフィードしているため、bは常にaよりも大きくなります。したがって、たとえば、数値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ループは本体を何度もループし、毎回計算を開始する前に条件をテストしますが、ifステートメントは1回だけ実行されます。一般に、可能な場合はifステートメントを使用します。これは、whileループが無期限に実行される可能性があるためです(条件が満たされない状態になる可能性があり、永久に何度もループするため)。