C# 函数返回数组并将数组写入控制台

问题描述 投票:0回答:4

这是一个从控制台获取整数的函数,这部分工作正常。麻烦在于从数组中写入值的部分。

Console.WriteLine("Function get numbers...");

static int[] numbers(int[] values){
    for(int ind = 0; ind < 10; ind++){
        Console.WriteLine("Type a number: ");
        values[ind]= int.Parse(Console.ReadLine());
    }
    return values;
}
numbers(new int[10]);

for(int s= 1; s < 10; s++){
    Console.WriteLine(numbers(new int[s]));
}

我查看了文档,但没有找到解决方案。

c# .net function return-value
4个回答
0
投票
Console.WriteLine("Function get numbers...");

static int[] numbers(int[] values){
    for(int ind = 0; ind < 10; ind++){
        Console.WriteLine("Type a number: ");
        values[ind]= int.Parse(Console.ReadLine());
    }
    return values;
}
var values = numbers(new int[10]);

for(int s= 0; s < 10; s++){
    Console.WriteLine(values[s].ToString()));
}

我认为这有效吗?我似乎没有尝试解析它


0
投票

显示数组的最简单方法是使用

string.Join()
将数组的元素组合成一个以逗号分隔的字符串

int[] array = new int[] { 1,2,3,4,5 };
Console.WriteLine(string.Join(",", array));

有结果

1,2,3,4,5

您可以使用

Environment.NewLine
而不是
","
将每个值放在新行中。

另外,请注意,在您的代码中,您在函数中使用数组作为参数,该函数填充数组然后返回它。但你不需要传递数组,只需要传递所需的数组大小

static int[] numbers(int count){
    int[] values = new int[count];
    for(int ind = 0; ind < 10; ind++){
        Console.WriteLine("Type a number: ");
        values[ind]= int.Parse(Console.ReadLine());
    }
    return values;
}

int[] array = numbers(10);

或者填写数组中已有的元素数量

static void numbers(ref int[] values){
    for(int ind = 0; ind < 10; ind++){
        Console.WriteLine("Type a number: ");
        values[ind]= int.Parse(Console.ReadLine());
    }
}

int[] array = new int[10];
numbers(ref array);

取决于您要创建新数组的次数,或者想要一遍又一遍地重复使用现有数组的次数。此处不需要关键字

ref
,因为您始终可以修改数组的元素,但添加它作为约定,以向读者表明函数
numbers()
确实修改了数组参数。

最后,我将逐行解释正在发生的事情,以演示为什么代码没有按预期运行

  1. numbers(new int[10]);
    这会创建一个包含 10 个元素的新数组,并将其传递给函数
    numbers()
    函数的结果永远不会分配给局部变量,因此永远丢失。
  2. for(int s= 1; s < 10; s++){ ... }
    这是 9 次迭代(1 到 9)的循环。
  3. Console.WriteLine(numbers(new int[s]));
    这会创建一个包含
    s
    元素(同样是 1 到 9)的新数组,并将其传递给函数。函数的结果传递给
    WriteLine()
    方法,其中数组的默认行为是显示类型而不是参数的内容。

解决上述问题的可能方法是创建数组once并在循环中访问其元素(使用上面对

numbers()
的第一次更新)

int[] array = numbers(10);
for(int s= 0; s < array.Length; s++){
    Console.WriteLine(array[s]);
}

请注意,迭代计数由

array.Length
而不是硬编码数字 10 驱动。


0
投票

读完一些答案后,我有了一些想法。这现在正在发挥作用。谢谢你的帮助。

Console.WriteLine("Function get numbers...");
int[] values2 = new int[10];
static int[] numbers(int[] values){
    for(int ind = 0; ind < values.Length; ind++){
        Console.WriteLine("Type a number: ");
        values[ind]= int.Parse(Console.ReadLine());
    }
    return values;
}
values2 = numbers(new int[10]);

Console.WriteLine("Array Length: " + values2.Length);

for(int i = 0; i < values2.Length; i++){
    Console.WriteLine(values2[i]);
}

0
投票
                        int[] values2 = new int[10];            
                        int[] numbers(int[] values)
                        {
                            for (int ind = 0; ind < values.Length; ind++)
                            {
                                Console.WriteLine("Type a number, then Enter" + " " + (values2.Length - ind) + " " + "times");
                                values[ind] = int.Parse(Console.ReadLine());
                            }
                            return values;
                        }
                        values2 = numbers(new int[10]);
                        for (int n = 0; n < values2.Length; n++)
                            Console.Write(values2[n] + ",");
© www.soinside.com 2019 - 2024. All rights reserved.