在方法中有一个整数,每次该方法被调用到 lass 的特定对象时,该整数都会增加 1

Having an integer inside a method that increases by 1 everytime the method was called to a specific object of a lass

我的 C# 代码中有一个 'Movie' class,它有一个 int[] ratings = new int[10]; 作为字段。我想从我的主程序中将数字放入这个空数组中。

为此,我需要一个方法,它可以指向数组的实际空闲索引以将整数放在那里,但是指向空闲索引的另一个整数将在每次该方法时重置为 0叫做。因此,我的问题是,如何在我的方法中放置一个整数,每次调用该方法时该整数都会增加。

这是class中的方法:

public void Rate(int rating)
{
   int x = 0;
   ratings[x] = rating;   

}

我在主程序中是这样调用的

Movie asd = new Movie(blabla...);
Rate.asd(1);
Rate.asd(1);
Rate.asd(1);

所以我调用了 3 次,我希望 class 方法中的 'x' 整数增加。

提前致谢。

问题是局部变量在退出方法时被丢弃。

class SomeClass
{
    private int x = 42;

    public void DoSometing(int y)
    {
        int a = y + 5;
        x += a * a;
        // a stops to exist here
    }
}

解决方案是将变量存储在包含 class 以及

class SomeOtherClass
{
    private int x = 42;
    private int a = 0;

    public void DoSomething(int y)
    {
        a = y + 5;
        x += a * a;
    }
}

现在 SomeOtherClass 记住了 a 的值。这基本上就是成员变量 a.k.a 的意义所在。字段 - 存储对象的状态。

更适合您的问题:

class ClassWithAnArrayAndCount
{
    private int[] values = new int[10];
    private int   taken  = 0;

    public void Add(int value)
    {
        if (taken == 10)
            throw new ArgumentOutOfRangeException(); // sorry, no more space

        values[taken++] = value;
    }

    public int Taken { get { return taken; } }
}

首先,您发布的代码有错误。 正如我所想的,而不是:

Movie asd = new Movie(blabla...);
Rate.asd(1);
Rate.asd(1);
Rate.asd(1);

你想在这里粘贴:

Movie asd = new Movie(blabla...);
asd.Rate(1);
asd.Rate(1);
asd.Rate(1);

由于 C# 不允许使用静态方法变量(就像 C++ 那样),您有两个选择:

  • 首先,使 x 值(来自 Rate 方法)成为 Movie 的 class 变量,因此 Rate 方法将 "remember" 下一个索引,

  • second(和更好)而不是 intiger 数组 - 如果可能的话使用任何类型的列表或队列(可以为您管理索引)。