Работа с "для петель" - PullRequest
       1

Работа с "для петель"

0 голосов
/ 31 октября 2011

Я изучаю Java с использованием «Java как программировать» (Deitel и Deitel). Прямо сейчас я застрял, решая упражнение, которое требует, чтобы я распечатал таблицу со всеми возможными значениями «тройки Пифагора» до 500. Я должен использовать вложенный «цикл for», чтобы проверить все возможности. Другими словами: a, b и c должны быть целыми числами. Следующее выражение должно быть истинным: a2 + b2 = c2, и программа должна напечатать таблицу со всеми возможными комбинациями (с c <500). Я просто не могу понять это. Кто-нибудь может мне помочь, пожалуйста! Мой код, который печатает только первую комбинацию (3 4 5), выглядит следующим образом: </p>

    public class Pythagoras 
            {
        public static void main(String[] args) 
            {

            for (int a = 3, b = 4, c = 5; (Math.pow(a, 2) + Math.pow(b, 2) == Math.pow(c, 2)) && (c <= 500); c++)
        {
        System.out.printf("%d %20d %20d", a, b, c);
        }

        }

    }

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

Ваш код печатает только 3 4 5, потому что он выполняет только 1 итерацию цикла for.В вашем цикле for вы увеличиваете c каждой итерации, но не меняете a и b.Это означает, что после первой итерации он будет оценивать 3^2 + 4^2 == 6^2, что возвращает false, и, таким образом, он выходит из цикла for.

Чтобы решить эту проблему, вы можете использовать три вложенных цикла for, например:

for(int a = 1; a < 500; a++){
   for(int b = 1; b < 500;b++){
       for(int c = 1; c < 500;c++){
           if(Math.pow(c,2) == Math.pow(a,2) + Math.pow(b,2){
                // code execution
           }
       }
   }
}
1 голос
/ 31 октября 2011

Как вы заметили, у вас должно быть вложенных циклов, т.е. для каждой переменной a, b и c у вас должен быть отдельный цикл, проверяющий все возможные значения:

for(int a = 1; a <= 500; a++) {
  for(int b = 1; b <= 500; b++) {
    for(int c = 1; c <= 500; c++) {
      ...
    }
  }
}

Далее у вас есть условие, которое вы проверяете внутри цикла (то есть, где находится ...).Не путайте ваше выходное условие с условием цикла (когда цикл завершается).

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