如何在控制台上显示给定子序列的所有成员
本文关键字:成员 控制台 显示 | 更新日期: 2023-09-27 18:11:54
我试图理解为什么我不能只打印数组子序列的成员,这等于输入的整数。数组也从控制台中读取。当我运行程序时,只有这些成员中的第一个出现了,但他也是一个看似随机的零数,而子序列的其余部分被省略了。如果有比使用第二个数组更好的方法,我会很感激你分享它。好的,要详细说明-我想知道如何打印上述子序列的所有成员,你能给我一个有用的建议或样本吗?以下是输入、输出和代码:
4 4 56 57 58
84 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();