Цикл 10 раз с добавлением ввода, с циклом for и do while в C #? - PullRequest
4 голосов
/ 20 марта 2012

Я новичок на базовом курсе C # и у меня проблемы с получением задания на работу. Я построил базовый калькулятор, и он отлично работает. Теперь мне нужно было добавить новую кнопку «Сумма», которая будет принимать входные данные из одного из моих блоков (number1Txtbox) и добавлять его к себе 10 раз через цикл.

Я пролистал страницы моей книги на c # и не могу понять это. Я понял, как инициализировать цикл с помощью счетчика и т. Д., Я просто не могу заставить это работать на всю жизнь.

Мне сказали использовать цикл for, а затем переключиться на цикл do while. Что на самом деле не имеет смысла для меня, я предположил, что мог бы сделать это только с помощью цикла for. Итак, мой вопрос:

1) Мне даже нужно переключиться на цикл do while, чтобы сделать это?
2) Что я делаю не так?

Вот то, что я имею до сих пор, и это просто останавливает мою программу, когда я пытаюсь нажать кнопку суммы после ввода числа в текстовое поле:

private void sumBtn_Click(object sender, EventArgs e)
{
    int counter;
    int loopAnswer;
    int number1;

    number1 = int.Parse(number1Txtbox.Text);

    for (counter = 1; counter <= 10; counter++)
    {
        loopAnswer = number1 + number1;
        do
        {
            loopAnswer = loopAnswer + number1;
        } while (counter <= 10);

        equalsBox.Text = loopAnswer.ToString();
    }
}

Спасибо, ребята!

Ответы [ 7 ]

7 голосов
/ 20 марта 2012

Вы смешиваете вещи. Вы либо делаете это:

private void sumBtn_Click(object sender, EventArgs e)
{
    int counter;
    int loopAnswer = 0;
    int number1 = int.Parse(number1Txtbox.Text);

    for (counter = 1; counter <= 10; counter++)
    {
        loopAnswer += number1; //same as loopAnswer = loopAnswer + number1;
    }
    equalsBox.Text = loopAnswer.ToString();
}

или это:

private void sumBtn_Click(object sender, EventArgs e)
{
    int counter = 1;
    int loopAnswer = 0;
    int number1 = int.Parse(number1Txtbox.Text);

    do
    {
        loopAnswer += number1; //same as loopAnswer = loopAnswer + number1;
        counter++;
    } while (counter <= 10);


    equalsBox.Text = loopAnswer.ToString();

}

Кроме того, окончательный ответ (equalsBox.Text = loopAnswer.ToString();) должен быть не в курсе.

0 голосов
/ 20 марта 2012

Для примера скажем, что число1 = 4. Когда вы выполняете строку loopAnswer = number1 + number1;, результирующее значение loopAnswer всегда будет равно 8. Если вы хотите увеличить loopAnswer, то вам следует использовать loopAnswer = loopAnswer + number1;, или сокращенный синтаксис loopAnswer += number1;

Что касается использования цикла for вместо do-while, я предполагаю, что дело не в использовании обоих циклов одновременно, этовопрос использования цикла for для иллюстрации концепции, а затем переключение на использование цикла do-while для иллюстрации концепции.

Вы можете выполнить это упражнение, используя цикл for, как это:

for (counter = 1; counter <= 10; counter++)  
{  
    loopAnswer += number1; 
}

equalsBox.Text = loopAnswer.ToString();  

Вы также можете выполнить те же функции, используя цикл do-while, например:

int counter = 1;
do  
{  
    loopAnswer += number1;  
    counter++;
} while (counter <= 10);  

equalsBox.Text = loopAnswer.ToString();  
0 голосов
/ 20 марта 2012

Этот код вызывает бесконечный цикл (что является причиной остановки):

for (counter = 1; counter <= 10; counter++)
{
    loopAnswer = number1 + number1;
    do
    {
        loopAnswer = loopAnswer + number1;
    } while (counter <= 10);

    equalsBox.Text = loopAnswer.ToString();
}

Фактически, здесь вы выполняете цикл от 1 до 10, и для каждой итерации вы выполняете loopAnswer = loopAnswer + number1; до тех пор, пока условие counter <= 10 не станет ложным. Но этого никогда не происходит, поскольку в вашем задании переменная-счетчик не изменяется, и поэтому программа остается навсегда в первой итерации.

Я думаю, вы должны избавиться от внутреннего do-while и поместить equalsBox.Text = loopAnswer.ToString(); вне цикла for.

0 голосов
/ 20 марта 2012

Ваш внутренний цикл (while) работает бесконечно, потому что счетчик никогда не увеличивается, поэтому ваша программа зависает.Установите точку останова в строке, чтобы иметь возможность отлаживать вашу программу и лучше понять, как работают циклы.

Чтобы выполнить это назначение, вам нужен только один цикл, определенно не вложенные циклы.Неважно, какой механизм зацикливания вы используете.

0 голосов
/ 20 марта 2012

Ваша программа зависает, потому что

        do
        {
            loopAnswer = loopAnswer + number1;
        } while (counter <= 10);

Не обновляет переменную счетчика вообще.Поэтому счетчик никогда не достигнет 10, поэтому этот цикл никогда не завершится.

для суммирования в цикле while сделайте это

counter = 1;
do {
    loopAnswer += number1;
    counter++;
} while(counter <= 10);
0 голосов
/ 20 марта 2012
private void sumBtn_Click(object sender, EventArgs e)
{
    int counter;
    int loopAnswer = 0;
    int number1;

    number1 = int.Parse(number1Txtbox.Text);


    for (counter = 1; counter <= 10; counter++)
    {
            loopAnswer += number1;
    }


equalsBox.Text = loopAnswer.ToString();

}
0 голосов
/ 20 марта 2012

Он останавливается, потому что когда он входит в цикл do while, counter никогда не изменяется.Если оно никогда не изменяется, counter <= 10 всегда верно, поэтому вы получаете бесконечный цикл.Он застрял там.

private void sumBtn_Click(object sender, EventArgs e)
{
    //these should default to 0, but we should to it explicitly, just in case.
    int loopAnswer = 0;
    int number1;

    if(int.TryParse(number1Txtbox.Text, out number1)
    {
        for (counter = 1; counter <= 10; counter++)
        {
            loopAnswer += number1;
        }

        equalsBox.Text = loopAnswer.ToString();
    }
    else
        equalsBox.Text = "Not A Number";
}

TryParse здесь просто хорошая практика.Он заботится о ситуации, когда у вас будет ввод текста.Можно также использовать блок try catch.

...