在方法中有一个整数,每次该方法被调用到 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 数组 - 如果可能的话使用任何类型的列表或队列(可以为您管理索引)。
我的 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 数组 - 如果可能的话使用任何类型的列表或队列(可以为您管理索引)。