如何用用户给定的索引和值替换数组中的double,并将每个元素向右移动并删除最后一个元素



我在替换值时遇到了问题,因为我不确定使用哪个函数或如何使用它。

问题:创建并填充一个包含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,并初始化它与ints。您与用户的所有交互也都使用ints。我知道整型可以隐式地转换为双精度,但您应该真正决定自己想要做什么,并始终如一地执行它。双字面值只是一个带有小数点的数字,如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.TryParsedouble.TryParse。它们允许您在进行转换之前测试合适的值。这样,如果用户输入错误的数据,您可以重复提示,直到他/她输入正确的数据。

享受

相关内容

最新更新