Почему я не могу объявить переменную в теле цикла do while? - PullRequest
0 голосов
/ 18 марта 2019

Я должен быть в состоянии сделать это. «Do while» выполняет инструкции и объявляет переменную и после сравнения.

Random rnd = new Random();

do{
    int number= rnd.Next();
} while (number != 0)

Проблема в том, что я могу скомпилировать следующий код:

Random rnd = new Random();
int number;

do{
     number= rnd.Next();
} while (number != 0)

Ответы [ 4 ]

4 голосов
/ 18 марта 2019

Ваша переменная number не существует вне цикла.

Попробуйте

int number;
Random rnd = new Random()

do{
number= rnd.Next();

}while (number != 0)
2 голосов
/ 18 марта 2019

Так работает язык - переменные, объявленные внутри блока do, недоступны вне этого блока (даже в предложении while).Это не имеет ничего общего с «когда» переменные объявлены (с точки зрения, когда код выполняется).Иначе это тоже будет законно:

do {
    Random rnd = new Random();
    int number= rnd.Next();

} while (number != 0)

Console.Writeline(number);  // accessing number outside the loop
1 голос
/ 18 марта 2019

Вы должны объявить номер вне области действия do следующим образом:

int number;

do{

    Random rnd = new Random();
    number= rnd.Next();

} while (number != 0)
0 голосов
/ 18 марта 2019

Открывающиеся и закрывающиеся фигурные скобки составляют область. Вы можете получить доступ к переменной, объявленной в области внутри этой области, а не за ее пределами. В вашем случае цикл while находится вне закрывающих фигурных скобок, поэтому он выходит за пределы области действия do. Вот почему вы не можете получить доступ к переменной из цикла while. Сначала необходимо объявить переменную перед циклом do while. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...