编辑:
我摆脱了大部分错误。谢谢你的帮助。
我的while循环(在我的Form类中)有问题,但基本上,它会测试看看“race”的获胜者是谁在我的应用程序中,它还启动了应用程序(Shark.Swim)。一旦找到胜利者是谁,就需要在我的投注类中获得“支付”方法。
所以这就是我所拥有的。
WHILE LOOP:
private void raceBtn_Click(object sender, EventArgs e)
{
public int[] finishingOrder = new int[4];
bool sharkFinished = false;
public int place = 1;
public int numSharksFinished;
while (numSharksFinished < 4)
{
sharkFinished = false;
for (int i = 0; i < 4; i++)
{
if (finishingOrder[i] == -1)
{
if (sharks[fish].Swim();)
{
finishedOrder[i] = place;
sharkFinished = true;
numSharksFinished++;
}
}
if(sharkFinished = true)
{
place++;
}
}
}
PAYOUT:
public double payout(int pool, int sharkPool)
{
for (int j = 0; j < 3; j++)
{
Guy[j].cash += Bets[i, j].Amount;
}
}
我认为最好的办法是将“payout”方法移到主窗体类中,因为我的Bet类中没有“Bets”数组的实例。
答案 0 :(得分:1)
您正在使用类型名称作为实例变量。例如:
return cash += Bet.payout(pool, sharkPool);
如果Bet.payout()不是静态方法,那么你需要先创建一个Bet实例来调用这个方法。
例如:
Bet b = new Bet();
return cash + b.payout(pool, sharkPool);
这似乎是几个不同地方的问题。
编辑:添加更多建议。
Bet EmptyBet { get { return new Bet() { amount = 0, fish = 0, better = this }; }
这里的问题是您在静态访问器中使用实例引用(this
)。将静态成员视为某事物的唯一副本。因此,它不知道实例(即特定的,类型的唯一出现)。
我不确定better
代表什么,但鉴于上下文,您无法将其分配给this
。
public class Bet
{
#region instance members
public decimal Amount
{
get;
set;
}
public string Description
{
get;
set;
}
public void Payout()
{
// do something
}
#endregion
#region static members
public static Bet Empty
{
get
{
Bet b = new Bet();
b.Amount = 0M;
b.Description = "Default Empty Bet";
return b;
}
}
#endregion
}
编辑#3:使用访问者声明实例属性
//
// This will not compile because members have been defined more than once
public class Bet
{
// You can declare smart properties with default initializers
// by not declaring a body for the get/set accessors
public decimal Amount
{
get;
set;
}
public string Description
{
get;
set;
}
// OR, you can declare private variables and expose them
// publicly via get/set accessors. This gives flexibility
// in internal manipulation (sometimes) but creates more code
private decimal _amount = 0M;
public decimal Amount
{
get { return _amount; }
set { _amount = value; }
}
private string _description = string.Empty;
public string Description
{
get { return _description; }
set { _description = value; }
}
}
编辑#4:
public void collect(int pool, int sharkPool)
{
return cash += betClass.payout(pool, sharkPool);
}
错误4无法隐式转换类型 'double'到'int'。一个明确的 转换存在(你错过了吗? 演员?)Lab 3 \ Guy.cs 90 19 lab3
double是比int更精确的类型(一般来说)。这意味着它不能被隐式“填充”到为int分配的内存空间中。
如果你在Guy类中使用了double,那么你需要将它更改为int,或者在适当的地方使用它,或者在整个过程中使用double。 double允许小数点,这可能在管理货币的实际应用程序中需要(或者更好的是十进制类型)。
编辑#5:
private int winningSharkTotal(int Winner)
{
int Result = 0;
for (int i = 0; i<3; i++)
{
Result += bets[i+(Winner*3)];
}
return Result;
}
这个错误的东西......首先,你的变量的外壳确实令人困惑,因为当大多数c#程序员看到一个大写的变量名时,它看起来像一个类型,而不是一个方法参数(注意SO编辑器如何格式错误)。
第二件事,我不知道你想用这个来实现什么逻辑:
bets[i+(Winner*3)]
无论i + (winner * 3)
等于将使用的数组索引。这充其量是模棱两可的。也许你试图将获胜者的收入增加两倍?
最后,bet[index]
将返回Bet对象,而不是int。你需要更像bet[index].Amount
的东西(或者你正在使用的属性)。
答案 1 :(得分:0)
您尝试访问Bet的描述,但Bet不是实例。
Bet bet = new Bet();//first
bet.Desciption; //after
答案 2 :(得分:0)
对于错误1,问题是您没有声明'i'的类型。将其更改为:
for (int i = 0; i < bets.Length; i++)
在C#/ .NET中,当您引入新变量时,您必须声明类型。 (或者您可以将变量声明为“var”以让编译器推断出类型,但我现在不担心,只需使用int。)
答案 3 :(得分:0)
在前两个,你有一个名为Bet的对象吗?在我看来,Bet
这里指的是类名,而不是对象变量。
for
循环应该是(int i=0; ...)
winner
需要大写字母W(Winner
)