我无法修复我的代码。 CS0120错误

时间:2017-11-30 20:53:51

标签: c#

class mat{

int i, j, m, n;
int[,] a = new int[20, 20];
public static int Diagleft(int m,int n)
{
    int d = 0,i,j;

    if (m == n)
    {
        for (i = 1; i <= m; i++)
        {

            for (j = 1; j <= n; j++)
            {
                if (i == j)
                {
                    int value_1 = Math.Abs(a[i, j]);
                    d = d + value_1;
                }

            }
        }
        return d;
    }

}
class matsum
{
    public static void Main(string[] args)
    {

        Console.WriteLine("Enter Row Value");
        m = int.Parse(Console.ReadLine());
        Console.WriteLine("Enter Column Value");
        n = int.Parse(Console.ReadLine());
        Console.WriteLine("Enter Elements one by one");
        for (i = 1; i <= m; i++)
        {
            for (j = 1; j <= n; j++)
            {
                a[i, j] = int.Parse(Console.ReadLine());
            }
        }
        Console.WriteLine("Given Matrix");
        for (i = 1; i <= m; i++)
        {
            for (j = 1; j <= n; j++)
            {
                Console.Write("\t{0}", a[i, j]);
            }
            Console.WriteLine();
        }
        mat ma = new mat();
        int result = mat.Diagleft(m, n);
        Console.WriteLine("Left Diagonal is: {0}", result);
        Console.ReadKey();

    }
}

我无法修复我的代码。请帮忙。我不知道如何修复CS01020。我觉得我对课程犯了错误。这是我的功课。我认为这个错误可以很快解决。我称之为主要的3种方法。这些代码中有令牌代码。所以我的代码被忽略了。我正在尝试按需要制作此代码。但是我无法实现。这是第一个被忽略的代码。尽管它运行正常:

class mat
int i, j, m, n;
int[,] a = new int[20, 20];
public void get()
{
    Console.WriteLine("Enter Row Value");
    m = int.Parse(Console.ReadLine());
    Console.WriteLine("Enter Column Value");
    n = int.Parse(Console.ReadLine());
    Console.WriteLine("Enter Elements one by one");
    for (i = 1; i <= m; i++)
    {
        for (j = 1; j <= n; j++)
        {
            a[i, j] = int.Parse(Console.ReadLine());
        }
    }
    Console.WriteLine("Given Matrix");
    for (i = 1; i <= m; i++)
    {
        for (j = 1; j <= n; j++)
        {
            Console.Write("\t{0}", a[i, j]);
        }
        Console.WriteLine();
    }
}
public void diagleft()
{
    int d = 0;

    if (m == n)
    {
        for (i = 1; i <= m; i++)
        {

            for (j = 1; j <= n; j++)
            {
                if (i == j)
                {
                    int value_1 = Math.Abs(a[i, j]);
                    d = d + value_1;
                }

            }
        }
        Console.WriteLine("Diagonal Sum from left side= {0}", d);
    }
    else
    {
        Console.WriteLine("Can't Perform Diagonal Sum from left side");
    }
}

public void diagright()
{
    int z = 0;
    if(m==n)
    {
        for (i = 1; i <= m; i++)
        {
            for(j=n; j >= 1; j--)
            {
                if(i+j==(m+1))
                {
                    int value_2 = Math.Abs(a[i, j]);
                    z = z + value_2;
                }
            }
        }
        Console.WriteLine("Diagonal Sum from right side= {0}", z);
    }
    else
    {
        Console.WriteLine("Can't perform diagonal sum from right side");
    }
}
class matsum
{
    static void Main(string[] args)
    {
        mat ma = new mat();
        ma.get();
        ma.diagleft();
        ma.diagright();
        Console.Read();
    }
}

2 个答案:

答案 0 :(得分:0)

在你的函数Diagleft(m,n)

如果m!= n

,则没有返回语句

答案 1 :(得分:0)

我认为问题是你在这一行上得到一个CS0120(非静态字段,方法或属性'成员'需要一个对象引用)错误:

int value_1 = Math.Abs(a[i, j]);

这是因为“int [,] a”声明需要是静态的,如下所示:

static int[,] a = new int[20, 20];

由于Diagleft方法是静态的,它只能访问类的静态成员。它将无法访问实例变量。

顺便说一句,您的Diagleft方法也不会在所有代码路径上返回值。另外,使用相同的名称(即i和j变量)使本地方法变量和类的私有成员变量令人困惑。