return Observable.throw(err);
问题是,当我尝试运行该程序时,它说出了名称:
'avg'在当前上下文中不存在
为什么会发生这种情况,我该如何解决呢?
答案 0 :(得分:1)
您在循环范围内定义avg
,因此它不在范围之外。 (当您将新值分配给avg
时,请不要替换现有值,而是使用+=
来增加现有值)
修正:
int avg = 0;
while (f < trycount)
{
int now = numgen.Next(1, 6);
avg += now;
f++;
}
另外请记住在打印平均值时将其除以添加的项目数:(记得将其中一个操作数转换为包含小数点的类型而不是int
- 所以你会得到真正的平均值,而不是它的四舍五入int
版本
Console.WriteLine(avg/(double)f);
请参阅MSDN中的范围,以了解更多变量和方法的访问时间和地点。
答案 1 :(得分:0)
你宣布&#34; avg&#34;在&#34;和#34;的范围内变量。超出范围的任何东西都看不到变量。
你应该在while之外声明你的avg变量。
答案 2 :(得分:0)
如果在while循环中声明变量,它会抛出错误,因为“名称”avg“在当前上下文中不存在”。因为你可以在while循环中声明,当while循环中的条件不能满足时,变量无法定义并声明,所以在打印结果时它会抛出错误。
所以我们可以在while循环之外定义变量。
class Program
{
static void Main(string[] args)
{
int f = 0,avg=0;
Console.WriteLine("enter ammount of tries");
int trycount = Convert.ToInt32(Console.ReadLine());
Random numgen = new Random();
while (f < trycount)
{
int now = numgen.Next(1, 6);
avg = 0 + now;
f++;
}
Console.WriteLine(avg);
Console.ReadLine();
}
}
答案 3 :(得分:0)
像这样的东西,请参阅评论:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("enter amount of tries"); // typo
int TryCount = Convert.ToInt32(Console.ReadLine());
Random numgen = new Random();
// it is sum we compute in the loop (add up values), not average
// double: final average will be double: say 2 tries 4 and 5 -> 4.5 avg
// please notice, that sum is declared out of the loop's scope
double sum = 0.0;
// for loop looks much more natural in the context then while one
for (int i = 0; i < TryCount; ++i)
sum += numgen.Next(1, 6);
// we want to compute the average, right? i.e. sum / TryCount
Console.WriteLine(sum / TryCount);
Console.ReadLine();
}
}
仅供参考:在现实生活中,我们通常使用 Linq ,它更紧凑,可读:
Console.WriteLine("enter amount of tries"); // typo
int TryCount = Convert.ToInt32(Console.ReadLine());
Random numgen = new Random();
Console.Write(Enumerable
.Range(0, TryCount)
.Average(x => numgen.Next(1, 6)));
Console.ReadLine();