2017-02-22 9 views
-1

Я использую Eclipse, и когда я отлаживаю и просматриваю код, мой внешний цикл не увеличивается, а корень всегда остается равным 2. Может ли кто-нибудь сказать мне, почему? Верхний комментарий объясняет, что я пытаюсь выполнить.Может ли кто-нибудь сказать мне, почему мой внешний цикл for не увеличивает эту переменную?

public class First_120_Numbers { 
    /*A Leyland number sequence is a series of numbers of the formxy + yxwhere x and y are integers greater than 1.  
    * They are named after the mathematician Paul Leyland. The first few Leyland numbers are 
    *8, 17, 32, 54, 57, 100, 145, 177, 320, 368, … 
    *Take 145 as an example where it is x^y+y^x = 34+43 
    *By considering the terms in the Leyland sequence find the sum of the first 20 numbers in the Leyland sequence.*/ 
    public static void main(String[] args) { 
     double root, expo, prodX, prodY, leySum1 = 0, leySum2 = 0; 
     root = 2; // Leyland numbers must be greater than 1 
     expo = 2; 
     for (; root <= 20; root++) { 
      for (; expo <= 20; expo++) { 
       prodX = Math.pow(root, expo); //raises root to expo 
       prodY = Math.pow(expo, root);// raises expo to root 
       leySum1 = prodX + prodY; 
       leySum2 += leySum1; 
       System.out.println(leySum1); 
      } 
     } 
     System.out.println("The sum of the leyland numbers " 
       + "up to 20 is " + leySum2); 
    } 
} 
+2

объявить и инициализировать переменные цикла в пределах их соответствующих петель. – Jyr

+0

Вы всегда можете добавлять инструкции печати в свои циклы, чтобы узнать, что это за переменные. В своем внутреннем цикле добавьте System.out.println («root:» + root + «expo:» + expo); Он будет печатать значения, которые эти переменные принимают при выполнении циклов. – Ali

ответ

1

Вы вправе указать неправильный код. root переменная получает приращение каждый раз, но, я думаю, вы забыли инициализировать переменную expo каждый раз, когда итерация внешнего цикла повторяется.

Подумайте, когда внешняя петля завершает свою первую итерацию (для root = 2), значение expo равно 21, и поскольку вы не инициализируете его снова 2, внутренний цикл не выполняется для остальной итерации внешний контур.

Чтобы лучше понять execture следующий фрагмент кода и посмотреть, что произойдет!

for (root = 2; root <= 20; root++) { 
    System.out.print(root + " --> "); 
    for (expo = 2; expo <= 20; expo++) { 
     // your code goes here 
     System.out.print(expo + " "); 
    } 
    System.out.println(""); 
} 

Он выводит:

2.0 --> 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 
3.0 --> 
4.0 --> 
5.0 --> 
6.0 --> 
7.0 --> 
8.0 --> 
9.0 --> 
10.0 --> 
11.0 --> 
12.0 --> 
13.0 --> 
14.0 --> 
15.0 --> 
16.0 --> 
17.0 --> 
18.0 --> 
19.0 --> 
20.0 --> 

Чтобы решить вашу проблему, вы можете обновить свой код следующим образом.

for (root = 2; root <= 20; root++) { 
    for (expo = 2; expo <= 20; expo++) { 
     prodX = Math.pow(root, expo); //raises root to expo 
     prodY = Math.pow(expo, root);// raises expo to root 
     leySum1 = prodX + prodY; 
     leySum2 += leySum1; 
     System.out.println(leySum1); 
    } 
} 

См. Live Demo вашего кода.

+0

Я сделал то, что вы сказали, и это ничего не изменило. Я получаю разные результаты, но когда я отлаживаю, он все еще показывает, что root не увеличивает время пребывания. 2. Также в исходном коде, когда я отлаживаю значение expo, не становится 21, поэтому я не знаю, что вы подразумеваете под этим –

+0

@ A.PROSCIA см. Живую демонстрацию ваш код здесь - https://ideone.com/9Dz4q3. Если вы все еще не можете понять, в чем проблема, тогда я ухожу. –

1

Вам необходимо повторно инициализировать переменную expo для каждого запуска внешнего цикла.

Это это

double root, expo, prodX, prodY, leySum1 = 0, leySum2 = 0; 
     for (root=2; root <= 20; root++) { 
      for (expo=2; expo <= 20; expo++) { 
       prodX = Math.pow(root, expo); //raises root to expo 
       prodY = Math.pow(expo, root);// raises expo to root 
       leySum1 = prodX + prodY; 
       leySum2 += leySum1; 
       System.out.println(leySum1); 
      } 
     } 
     System.out.println("The sum of the leyland numbers " 
       + "up to 20 is " + leySum2);