2016-02-23 36 views
-5

因此,我正在编写一个程序,输入一个数字(二进制​​),然后将该输入的每个数字分配到一个数组中。为什么我无法将变量正确地分配给数组?

static void Main(string[] args) 
{ 
    Console.Write("Please enter a binary number: "); 
    String input = Console.ReadLine(); 
    int inputLength = input.Length; 
    int nInput = Convert.ToInt32(input); 
    int[] digits; 
    digits = new int[inputLength]; 

    int remain = 10; 
    int divider = 1; 
    for (int i = 0; i > inputLength; i++) 
    { 
     digits[i] = (nInput % remain)/divider; 
     remain = remain * 10; 
     divider = divider * 10; 
    } 
    Console.WriteLine("Demo number " + digits[0]); 
} 

但是,似乎我所有的数组都有值为0,每当我运行代码。这是为什么?

所以,如果我的输入11010, digit[0]应该是0 digit[1]应为1 digit[2]应该是0 digit[3]应为1 digit[4]应为1

+1

对于初学者来说'I> inputLength'应该是'我

+0

嘿,下次调试你的代码。你会发现问题比发布问题更快;-) –

+0

int inputLength = Convert.ToInt32(input); – toha

回答

2

环路不执行因为它的状况总是错误的;所以,你得到它的默认值,更改条件为i < inputLength;

如果你这样做,给输入为“123”

在控制台上的输出将是:Demo number 3;并且阵列将被

digit[0]=3 
digit[1]=2 
digit[2]=1 

一些建议,以改进代码:

  • 使用int.TryParse();而不是为Convert.ToInt32();为避免引发转换例外。你可以看到一个比较here
  • 由于数字是一个数组,你可以使用Array.Reverse()

即扭转他们..

 String input =Console.ReadLine(); 
     int nInput; 
     int inputLength = input.Length; 
     if (int.TryParse(input, out nInput)) 
     { 
      int[] digits = new int[inputLength]; 
      Array.Reverse(digits); 
      Console.WriteLine("Reversed Number is:{0}",String.Join("",digits)); 
     } 
     else { Console.WriteLine("Wrong input"); } 
+0

是的,谢谢你,它现在起作用!我忽视了这样一件小事。 – user3577478

0

试试这个代码!

static void Main(string[] args) 
     { 
      string input = Console.ReadLine(); 
      int[] vec = new int[input.Length]; 
      int i = 0; 
      foreach (char ch in input) { 
       vec[i] = Convert.ToInt32(ch.ToString()); 
       i++; 
      } 

      foreach (int numaux in vec) { 
       Console.WriteLine(numaux); 
      } 
      Console.Read(); 
     } 

在使用foreach语句输入字符串只是想迭代(将节省您从一个已经指出过错误),并且每个字符转换成将被存储在阵列内部的一个int。

干杯!

相关问题