我正在尝试编写一个C#函数来确定数组中的最大值并通过引用传递它。
这是我第一次使用C#进行编程,但它确实让我烦恼,因为我似乎无法在主要版本中正确分配它。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
class Program
{
static void Maxim(int n, ref int maxim, params int[] v) {
int i, max=v[0];
for (i = 0; i < n; i++) {
if (v[i] > max) max = v[i];
}
}
static void Main()
{
int[] vector = new int[10];
int n, i;
int maximul;
Console.WriteLine("Introduceti numarul de elemente: ");
n = Int32.Parse(Console.ReadLine());
Console.WriteLine("Valoarea introdusa: {0}", n);
for (i = 0; i < n; i++) {
vector[i] = Int32.Parse(Console.ReadLine());
}
Console.WriteLine("Elementele introduse sunt: ");
for (i = 0; i < n; i++) {
Console.WriteLine("Elementul {0}: {1}", i + 1, vector[i]);
}
Maxim(n, ref maximul, vector);
Console.WriteLine("Maximul din vector: {0}", maximul);
Console.ReadLine();
}
}
}
它返回以下错误:Use of unassigned local variable
。
答案 0 :(得分:3)
定义变量时初始化变量:
int n = 0, i = 0;
int maximul = 0;
原因可能是您将maximul
作为参考参数传递,但您没有对其进行初始化。
传递给 ref 参数的参数在传递之前必须初始化。这与out参数不同,out参数在传递之前不必显式初始化。
答案 1 :(得分:0)
Maxim是一个冗余变量。你永远不会在你的功能中使用它。
答案 2 :(得分:0)
问题是最大值存储在本地max
中,但调用者希望将其写入ref
参数maxim
。如果您删除本地max
并使用maxim
,则可以解决问题。
编写此函数的一种更惯用的方法是根本不使用ref
参数。而只是直接返回值
static intMaxim(int n, params int[] v) {
int i, max=v[0];
for (i = 0; i < n; i++) {
if (v[i] > max) max = v[i];
}
return max;
}
请注意,此处并不真正需要n
参数。可以通过表达式v
v.Length
的长度