Как использовать цикл for вместо цикла while - PullRequest
0 голосов
/ 11 июля 2010

Пришлось написать следующую программу для on-line pre-java-класса, используя циклы while, do-while и for.Ищу немного объяснений.Заранее спасибо!
PS При поиске справочников это Java или Javascript?Есть предложения для хорошего справочника?Я понимаю, в основном, дьявол, конечно, в деталях.

public class ExamsFor {

    public static void main(String[] arguments) {


    int inputNumber; // One of the exams input by the user.
    int sum;     // The sum of the exams.
    int count;   // Number of exams.
    Double Avg;    // The average of the exams.


    /* Initialize the summation and counting variables. */

    sum = 0;
    count = 0;

    /* Read and process the user's input. */

    TextIO.put("Please enter the first exam: "); // get the first exam.


        inputNumber = TextIO.getlnInt();

    for (inputNumber!=0; sum += inputNubmer; count++ ) {  // had the while loop below enter here, worked

    TextIO.put("Please enter the next exam, or 0 to end: "); // get the next exam.  
    inputNumber = TextIO.getlnInt();
    } 

    /* Display the result. */

    if (count == 0) {
    TextIO.putln("You didn't enter any data!");
    }
    else {
    Avg = ((double)sum) / count;
    TextIO.putln();
    TextIO.putln("You entered " + count + " exams.");
    TextIO.putf("The average for the exams entered is %1.2f.\n", Avg);
    } 

    } // end main ()
}  // end class ExamsFor

/*  Had the following 'while loop' in place of the 'for loop'


while (inputNumber != 0) {
    sum += inputNumber;  // Add inputNumber to running sum.
    count ++;        // Count the input by adding 1 to the count.

*/

Ответы [ 4 ]

5 голосов
/ 11 июля 2010

Вы можете сравнить операторы for и while, заметив, что в итеративной конструкции вам в основном нужно 4 вещи:

  • начальное значение значения, используемого в условии (A)
  • условие, которое используется для проверки, поддерживает ли итерации (B)
  • оператор, который изменяет значение, которое проверяется каждый раз (C)
  • тело самого утверждения (BODY)

для for у вас есть

for (A; B; C)
  BODY

в то время как для while (здесь полно шуток слов :) у вас есть что-то вроде

A;
while (B)
{
  BODY;
  C;
}

Это довольно просто, не правда ли?

1 голос
/ 11 июля 2010

Не должен ли цикл for быть: (обратите внимание на предыдущий; и опечатка в сумме + = inputNumber)

for (;inputNumber!=0; sum += inputNumber, count++ )

Цикл while будет

while(inputNumber!=0) {
// rest of the things
 sum+=inputNumber;
 count++;
}
0 голосов
/ 11 июля 2010

В вашем цикле for есть проблема, которая в основном неверна.Из Учебников Java:

Оператор for

[...] Общая форма оператора for может быть выражена следующим образом:

for (initialization; termination; increment) {
    statement(s)
}

При использовании этой версии оператора for имейте в виду, что:

  • Выражение инициализации инициализирует цикл;выполняется один раз, когда начинается цикл.
  • Когда выражение завершения принимает значение false, цикл завершается.
  • Выражение приращения вызывается после каждой итерации цикла;для этого выражения вполне приемлемо увеличивать или уменьшать значение.

Следующая программа, ForDemo, использует общую форму оператора for для вывода чисел от 1 до 10 на стандартный вывод:

class ForDemo {
     public static void main(String[] args) {
          for(int i=1; i<11; i++){
               System.out.println("Count is: " + i);
          }
     }
}

Я предлагаючтобы начать с учебников, но если вам интересно, вы найдете полные и более формальные подробности в Спецификации языка Java, раздел 14.14 Формула заявления .

0 голосов
/ 11 июля 2010

Прочитайте это и сравните цикл for с ожидаемым синтаксисом, чтобы увидеть, где вы идете неправильно.

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