2015-01-15 2 views
-1

Так что я учился C# Мне около 2 недель в это приключение. Я пытаюсь лучше понять, какие методы являются тем, для чего они могут быть использованы и в чем их цель.Метод while loop C#

Это то, что я придумал. Но он не работает, как я ожидал.

public void testmethod(int lower ,int upper , int num) 
{ 
    while (lower < upper) 
    { 
     ++num; 
     MessageBox.Show(num.ToString()); 
    } 

чем у меня есть кнопка, которая показывает окно сообщения

 private void button3_Click(object sender, EventArgs e) 
    { 
     testmethod(1 , 4 , 1); 
    } 

С моим ограниченным знанием C# Я думаю, что это должно показать окно сообщения, пока не достигнет числа 4. Im проходя по параметрам для верхнего и нижнего в методе. Это верно? Он продолжает идти, он никогда не останавливается.

+6

в то время как (1 <4) всегда будет истинным – corn3lius

+1

Вы фактически не изменить значение либо 'верхняя 'или' lower', поэтому вы никогда не столкнетесь с условием остановки –

+0

Потому что 'lower EZI

ответ

0
while (lower < upper) 

Это цикл inifity или никогда выполняться, потому что вы не измените lower или upper в петле.

Вы должны увеличить или уменьшить lowerupper

Или просто использовать цикл Еогеасп:

for(int i = lower; i <= upper; i++) 
{ 

} 
0

Вы никогда не меняющийся lower или upper, поэтому он никогда не заканчивает цикл. Петля только идет, пока условие все еще верно. Вы, вероятно, ищете что-то вроде этого в вашем testmethod:

while (num < upper) 
{ 
    MessageBox.Show(num.ToString()); 
    num++; 
} 

Это покажет значение для num и затем увеличить. Раньше вы увеличивали его (отсюда ++ перед переменной) и только затем печатали его.

0

Линия:

while (lower < upper) 
  • проверяет, является ли lower меньше upper. (1 меньше 4, поэтому верно)
  • Так что это петля.
  • Затем он снова проверяет состояние. (1 еще меньше 4, поэтому верно)

Итак ... когда и почему вы думаете, что цикл будет когда-нибудь закончится?
Он заканчивается только в том случае, если одна из переменных, lower или upper, изменяется.

Но единственная переменная изменить это num, который не, используемый в тесте!

0

Продолжает работать, пока lower составляет менее upper. Поскольку вы не меняете значение lower или upper внутри своей петли, это никогда не заканчивается.Вам нужно увеличить lower одной в каждой итерации:

while (lower < upper) 
{ 
    ++num; 
    MessageBox.Show(num.ToString()); 
    ++lower; 
} 
1

Ваше состояние: while (lower < upper)

Однако вы никогда не изменятьlower или upper. Только num. Таким образом, ваше состояние всегда остается верным, а его бесконечный цикл.

Вам необходимо каким-либо образом проверить, что такое num (как трудно сказать, поскольку вы передаете его), или измените lower (что может иметь больше смысла).

1

Проблема в том, что вы увеличиваете num, а не lower. Он будет продолжать увеличиваться, но тест lower < upper никогда не вернет false, потому что ни один из них не меняется. Вам нужно либо увеличивать lower себя или изменить свое состояние, как это то время как:

while (num < upper) { 
    ++num; 
    MessageBox.Show(num.ToString()); 
} 

Кстати, это довольно странно передать переменную счетчика, как num в метод. Вы можете просто инициализировать его до 1 (или 0) в пределах testmethod.

+0

Спасибо, я новичок, но учился. Я хотел проверить свои теории на том, что я думал о методах, и на самом деле лучше понять, что делает цикл while. Я видел, что вы говорили, когда я делал точку останова и смотрел на местные ценности. (Я сделал это до того, как я опубликовал, но я просто не видел его. Это был очень ценный тест для меня. Спасибо за помощь всем. –

1

Ниже кода напечатает 2 3 4. Поскольку вы никогда не присваивается новое значение для снижения

while (lower < upper) 
      { 
       ++num; 
       Console.WriteLine(num.ToString()); 
       lower = num; //Added. Else the loop is infinite 
      } 
0

Это потому, что в то время как условие цикла всегда верно.

Попробуйте ниже ++ вместо ++ NUM

1

у вас есть цикл бесконечности, Потому что ваше состояние всегда возвращает «истина».

Вы можете сделать что-то вроде:

public void testmethod(int lower ,int upper , int num) 
    { 
     while ((lower = num) < upper) 
     { 
      ++num; 
      MessageBox.Show(num.ToString()); 
     } 
    } 

Также проверить это =>http://www.dotnetperls.com/while