如何在控制台上显示给定子序列的所有成员

本文关键字:成员 控制台 显示 | 更新日期: 2023-09-27 18:11:54

我试图理解为什么我不能只打印数组子序列的成员,这等于输入的整数。数组也从控制台中读取。当我运行程序时,只有这些成员中的第一个出现了,但他也是一个看似随机的零数,而子序列的其余部分被省略了。如果有比使用第二个数组更好的方法,我会很感激你分享它。好的,要详细说明-我想知道如何打印上述子序列的所有成员,你能给我一个有用的建议或样本吗?以下是输入、输出和代码:

4 4 56 57 58

8

4 0 0 0 0 0

代替4 4

    int v = int.Parse(Console.ReadLine());
        int[] valueHolder = new int[arr1.Length];
        int currentSum = 0;
        for (int endIndex = 0; endIndex <= arr1.Length -1; endIndex++)
        {
            currentSum = 0;
            for (int currentSumIndex = endIndex; currentSumIndex >= 0;                 currentSumIndex--)
            {
                currentSum += arr1[currentSumIndex];
                if (currentSum == v)
                {
                    valueHolder[currentSumIndex] = arr1[currentSumIndex];
                }
                if (currentSum == v)
                {
                    for (int i = 0; i <= valueHolder.Length - 1; i++)
                    {
                        Console.Write(valueHolder[i] + " ");
                    }
                }
            }

如何在控制台上显示给定子序列的所有成员

我认为您最好在第一个for循环的行上放置一个断点,然后逐步执行您的代码。如果你在一张纸上写下每一个变量的状态你就会很清楚发生了什么。

然而,只是为了帮助你。

在外部循环(endIndex = 0)的第一次传递中,内部循环不执行。currentSumIndex = endIndex = 0,不能通过currentSumIndex >= 0测试。因此,跳过第一个4

在第二次传递中,因为currentSum等于4而发出数字4。但是,也会发出0的值,因为您正在遍历整个valueHolder数组,并将所有空值输出。

从第三遍开始,currentSum将永远不会等于你输入的数字:
内部循环的第一次传递将currentSum设置为56,它不等于v。内循环的第二次传递将其设置为56+4 (currentSum += arr1[currentSumIndex]),即60。因此,不会再发出任何东西,因为currentSum总是从当前数组位置向后返回到数组开始位置的所有数字的和,因此总是大于v

你不需要第二个数组。你只需要注意你的代码在做什么。旁注:我完全不知道为什么你有这个内循环,甚至不知道8在上面的示例条目中应该代表什么。

如果我在写这个,我会把它改成(假设你不能使用LINQ):

int v = int.Parse(Console.ReadLine());
for (int i= 0; i <= arr1.Length -1; i++)
{
    if (arr1[i] == v) {
        Console.Write(arr1[i].ToString() + " ");
    }
}
Console.WriteLine();