我的代码有什么问题(它处理数组大小)?

时间:2015-06-25 14:28:07

标签: c# arrays

我正在将数组大小初始化为1,但我在后续行中更新它。它甚至不存储数组中的第一个元素,因为最初的数组大小为1,但我预期它会。有人能给我一个解释吗?这是代码:

  class Program
  {
    static void Main(string[] args)
    {
      int num = int.Parse(Console.ReadLine());
      Console.Write("The binary number for " + num + " is  ");
      int size = 1;
      int[] binary = new int[size];
      size = 0;
      while(num>=1)
      {
        if (num % 2 == 0)
          binary[size++] = 0;
        else
          binary[size++] = 1;
          //size += 1;
          num = num / 2;
      }

      for (int i = size - 1; i >= 0; i--)
      {
        Console.Write(binary[i]);
      }
      Console.WriteLine();
      Console.Write("The Compliment of this number is  ");
      for (int i = size - 1; i >= 0; i--)
      {
        if (binary[i] == 0)
          binary[i] = 1;
        else
          binary[i] = 0;
      }
      for (int i = size - 1; i >= 0; i--)
      {
          Console.Write(binary[i]);
      }
      Console.WriteLine();
      Console.ReadKey();
    }
  }

2 个答案:

答案 0 :(得分:1)

您无法调整数组的大小,它始终具有您在初始化期间给出的长度(在您的情况下为1)。

答案 1 :(得分:1)

我认为问题特别在于您可以在后续行中更新数组大小。"

在这里制作阵列时:

int [] binary = new int [size];

然后大小 一成不变

当您拨打以下内容时: binary [size ++] = 0; 这实际上不会增加​​阵列中的插槽数量。实际上,该代码仅更改您要读取或写入值的索引。我可以看到你的代码将快速超出数组的范围(如果你要求除二进制之外的任何东西[0]

事实证明这个数组是一个棘手的数据类型;数组在创建时具有固定大小。你想要一些可以成长的东西! 所以你可以:

- 使用数组,但声明它的大小是Math.Ciel(logbase2(yourNumber))以确保你有足够的空间

- 使用可以增长的数据结构,如字符串或列表

- 您可以在每次需要时创建一个新数组并将其指定为:

binary = new int[++size];
binary[size-1]=whatever
祝你好运,希望这会有所帮助!