2014-04-17 59 views
1

我試圖將數字[0..999]設置爲數組中的某個位置。例如:將數字從數字設置到數組中的特定位置

number: 9 - array: 009 /// number 78 - array 078 /// number 245 - array 245. 

這是我的源代碼和它的作品,但有什麼簡單的方法做任務,這可能是有用的情況下,數量比較大?

uint check; 
uint[] number= new uint[3]; 

while (true) 
{ 
    Console.WriteLine("Input number"); 
    string input = Console.ReadLine(); 
    if (uint.TryParse(input, out check)) 
    { 
    if (check < 10) 
    { 
     number[2] = Convert.ToUInt32(Convert.ToString(input[0])); 
     break; 
    } 
    else if (check < 100) 
    { 
     number[1] = Convert.ToUInt32(Convert.ToString(input[0])); 
     number[2] = Convert.ToUInt32(Convert.ToString(input[1])); 
     break; 
    } 
    else if (check < 1000) 
    { 
     number[0] = Convert.ToUInt32(Convert.ToString(input[0])); 
     number[1] = Convert.ToUInt32(Convert.ToString(input[1])); 
     number[2] = Convert.ToUInt32(Convert.ToString(input[2])); 
     break; 
    } 
    else 
    { 
     Console.WriteLine("Out of range. Try again"); 
    } 
    } 
} 
+2

作爲一個側面提示:你不必將number []數組中的每個值都設置爲0-C#對每個值類型都有一個默認構造函數,並且總是將int初始化爲0 – kat0r

+0

只因爲我愛Linq:var number = input.PadLeft(3,'0')。Select(c => char.IsNumber(c)?(uint)(c - '0'):0u).ToArray(); –

回答

2

可以使用模運算符,沿着這些線路:

if (uint.TryParse(input, out check)) 
{ 
    if (check < 1000) 
    { 
    number[2] = check % 10; //gets last digit 
    check /= 10; //"shaves off" last digit 

    number[1] = check % 10; 
    check /= 10; 

    number[0] = check % 10; 
    } 
    else 
    { 
    Console.WriteLine("Out of range. Try again"); 
    } 
} 

注意,在這種方式,你也許可以數字化的任意大量的,不只是分1000號,與代碼如:

List<int> digits = new List<int>(); 
if (uint.TryParse(input, out check)) 
{ 
    while (check != 0) 
    { 
     digits.Insert(0, check % 10); 
     check /=10; 
    } 
} 
int[] digitsArray = digits.ToArray(); 
+0

你在循環中有2個分區:'check%10'和'check/= 10'。您只能使用'Math.DivRem'方法分割一次。並且在迭代之前可以計算結果中的總位數。 – Dmitry

+0

'DivRem'對我來說總是看起來違反直覺,而且它不會少於代碼(至少在C#6之前) – SWeko

+0

'Math.DivRem'只適用於已簽名的int,OP使用的uint。 – kat0r

0

也許這種方法可能會有所幫助。其轉換的給定number到的數字的陣列:僅

private static int[] NumberToArray(int number) 
{ 
    int[] digits = new int[(int)(Math.Log10(number) + 0.999999)]; 

    int i = digits.Length - 1; 
    while (number >= 10) 
    { 
     int rem; 
     number = Math.DivRem(number, 10, out rem); 
     digits[i--] = rem; 
    } 
    digits[0] = number; 
    return digits; 
} 

這裏由於Math.DivRem使用的int類型接受符號類型。

相關問題