我正在将数组大小初始化为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();
}
}
答案 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
祝你好运,希望这会有所帮助!