2016-10-31 6 views
-2
class Program 
{ 
    static void Main(string[] args) 
    { 
     int f = 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); 
      int avg = 0 + now; 
      f++; 
     } 
     Console.WriteLine(avg); 
     Console.ReadLine(); 
    } 
} 

проблема, когда я пытаюсь запустить программу он говорит, что имя:Ошибка Имя не существует в текущем контексте

«ср» не существует в текущем контексте

Почему это происходит и как я могу это исправить.

+1

Определения в среднем из сферы вашего цикла. – mybirthname

ответ

1

Вы определяете avg внутри области действия цикла и, следовательно, он не существует вне области видимости. (также при назначении нового значения avg не заменяют существующие значения, но использовать += увеличить существующее значение)

Fix:

int avg = 0; 
while (f < trycount) 
{ 
    int now = numgen.Next(1, 6); 
    avg += now; 
    f++; 
} 

Кроме того помните, при печати в среднем разделить его на количество элементов добавлено: (помните, чтобы бросить один из операндов к типу, который содержит десятичную точку и не int - так что вы получите реальное среднее, а не закругленные int версии этого)

Console.WriteLine(avg/(double)f); 

Чтобы узнать больше, когда и где переменные и методы являются accessibe, обратитесь к Областям в MSDN.

0

Вы указали переменную «avg» в окне «while». Все, что находится за пределами этой области видимости, не может видеть переменную.

Вы должны объявить переменную avg вне времени.

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(); 
      } 
    } 
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(); 
Смежные вопросы