我在替换值时遇到了问题,因为我不确定使用哪个函数或如何使用它。
问题:创建并填充一个包含5个双精度数的数组。要求用户输入值' v '和索引' i '。你的程序应该将数组中索引' i '处的值替换为' v ',同时将每个元素向右移动并删除最后一个元素。
这是我到目前为止所做的,但它没有工作
double[] myDoubleArray = {1, 2, 3, 4, 5};
System.Console.Write(" Please input a value: ");
int v = Convert.ToInt32(Console.ReadLine());
System.Console.Write(" Please input an index value: ");
int i = Convert.ToInt32(Console.ReadLine());
myDoubleArray[i] = v;
您明确表示这是一个赋值(在我看来,只要您这样说就可以)。然而,我不喜欢做你的作业;如果我做了,你什么也学不到。相反,我要帮你弄明白。首先你的代码:
double[] myDoubleArray = {1, 2, 3, 4, 5};
System.Console.Write(" Please input a value: ");
int v = Convert.ToInt32(Console.ReadLine());
System.Console.Write(" Please input an index value: ");
int i = Convert.ToInt32(Console.ReadLine());
myDoubleArray[i] = v;
现在赋值,更明确地:
- 创建并填充5个双精度数组。
- 要求用户输入值' v '和索引' i '。
- 你的程序应该用值' v '替换数组中索引' i '处的值
- 向右移动每个元素并删除最后一个元素。
您已经完成了前两部分。
你需要做的是交换最后两部分——首先为新元素腾出空间,然后,一旦有地方可以放新值,就把它放进去。
为新值腾出空间,有两种情况:
- 用户选择数组中的最后一个索引。在本例中,您只需覆盖最后一个元素,您的工作就完成了
- 用户选择其他索引(0 ~ N-2)。在这种情况下,您需要做的是将数组从选定的索引遍历到数组的末尾(少一个),从
i
第th项复制到i+1
第th项。当你这样做的时候,你可能会发现为什么大多数程序员认为"一个一个";问题是最常见的bug。- 想想这个。您需要向后循环(即从数组的末尾返回到选定的索引)。如果你在正常的转发方向上做,那么你将在创建任何空间之前覆盖内容
一旦"创建了一些空格",就覆盖相应的数组项。
其他注释:
- 您键入您的数组为
double[]
,命名为myDoubleArray
,并初始化它与int
s。您与用户的所有交互也都使用int
s。我知道整型可以隐式地转换为双精度,但您应该真正决定自己想要做什么,并始终如一地执行它。双字面值只是一个带有小数点的数字,如3.14152
- 您需要决定是否要将索引编号为0..N-1 (c#喜欢)或1..N(人类喜欢)。在你的程序的顶部写一个提示。比如:
System.Console.WriteLine($"There is an an array with {myDoubleArray.Length} doubles in it, indexed 1 to {myDoubleArray.Length}.");
- 你的代码,如果用户输入一个格式不正确的值,你的程序将抛出一个异常。用户输入数据几乎不是异常行为。考虑使用
int.TryParse
和double.TryParse
。它们允许您在进行转换之前测试合适的值。这样,如果用户输入错误的数据,您可以重复提示,直到他/她输入正确的数据。