2015-10-22 2 views
1

Итак, для моего класса AP Computer Science мы должны найти все Счастливые номера и распечатать их в конце. Я знаю, что мог бы сделать этот код намного проще, однако для меня это имело больше смысла. Вот моя проблема. В моем цикле for он работает только с первым номером, если он является счастливым числом, он печатает указанный номер, если он не печатает ничего, но он не пойдет в следующий номер. Спасибо за вашу помощь! Мой код ниже:Поиск счастливых чисел

public class HappyNumbers 
{ 
    public static void main(String [] args) 
    { 
     boolean done = false; 
     int sum = 0; 
     for (int x = 1; x < Integer.MAX_VALUE; x++) 
     { 
      String a = "" + x; 

      while (!done) 
      { 
       int length = a.length(); 

       if (length == 1) 
       { 
        int b = a.charAt(0) - '0'; 
        sum = (int)Math.pow(b,2); 
        int y = (int)sum; 
        a = "" + y; 

        if (y == 1) 
        { 
         System.out.println(x); 
         done = true; 
        } 

       } 


       else if (length == 2) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        sum = (int)(Math.pow(b,2) + Math.pow(c,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (y == 1) 
        { 
         System.out.println(x); 
         done = true; 

        } 
       } 

       else if (length == 3) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        int d = a.charAt(2) - '0'; 
        sum =(int)(Math.pow(b,2) + Math.pow(c,2) + Math.pow(d,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (y == 1) 
        { 
         System.out.println(x); 
         done = true; 
        } 
       } 

       else if (length == 4) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        int d = a.charAt(2) - '0'; 
        int e = a.charAt(3) - '0'; 
        sum = (int)(Math.pow(b,2) + Math.pow(c,2) + Math.pow(d,2) + Math.pow(e,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (sum == 1) 
        { 
         System.out.println(x); 
         done = true; 
        } 
       } 

       else if (length == 5) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        int d = a.charAt(2) - '0'; 
        int e = a.charAt(3) - '0'; 
        int f = a.charAt(4) - '0'; 
        sum = (int)(Math.pow(b,2) + Math.pow(c,2) + Math.pow(d,2) + Math.pow(e,2) + Math.pow(f,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (sum == 1) 
        { 
         System.out.println(x); 
         done = true; 
        } 
       } 

       else if (length == 6) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        int d = a.charAt(2) - '0'; 
        int e = a.charAt(3) - '0'; 
        int f = a.charAt(4) - '0'; 
        int g = a.charAt(5) - '0'; 
        sum = (int)(Math.pow(b,2) + Math.pow(c,2) + Math.pow(d,2) + Math.pow(e,2) + Math.pow(f,2) + Math.pow(g,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (sum == 1) 
        { 
         System.out.println(x); 
         done = true; 
        } 
       } 

       else if (length == 7) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        int d = a.charAt(2) - '0'; 
        int e = a.charAt(3) - '0'; 
        int f = a.charAt(4) - '0'; 
        int g = a.charAt(5) - '0'; 
        int h = a.charAt(6) - '0'; 
        sum = (int)(Math.pow(b,2) + Math.pow(c,2) + Math.pow(d,2) + Math.pow(e,2) + Math.pow(f,2) + Math.pow(g,2) + Math.pow(h,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (sum == 1) 
        { 
         System.out.println(x); 
         done = true; 

        } 
       } 

       else if (length == 8) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        int d = a.charAt(2) - '0'; 
        int e = a.charAt(3) - '0'; 
        int f = a.charAt(4) - '0'; 
        int g = a.charAt(5) - '0'; 
        int h = a.charAt(6) - '0'; 
        int i = a.charAt(7) - '0'; 
        sum = (int)(Math.pow(b,2) + Math.pow(c,2) + Math.pow(d,2) + Math.pow(e,2) + Math.pow(f,2) + Math.pow(g,2) + Math.pow(h,2) + Math.pow(i,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (sum == 1) 
        { 
         System.out.println(x); 
         done = true; 
        } 
       } 
       else if (length == 9) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        int d = a.charAt(2) - '0'; 
        int e = a.charAt(3) - '0'; 
        int f = a.charAt(4) - '0'; 
        int g = a.charAt(5) - '0'; 
        int h = a.charAt(6) - '0'; 
        int i = a.charAt(7) - '0'; 
        int j = a.charAt(8) - '0'; 
        sum = (int)(Math.pow(b,2) + Math.pow(c,2) + Math.pow(d,2) + Math.pow(e,2) + Math.pow(f,2) + Math.pow(g,2) + Math.pow(h,2) + Math.pow(i,2) + Math.pow(j,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (sum == 1) 
        { 
         System.out.println(x); 
         done = true; 
        } 
       } 

       else if (length == 10) 
       { 
        int b = a.charAt(0) - '0'; 
        int c = a.charAt(1) - '0'; 
        int d = a.charAt(2) - '0'; 
        int e = a.charAt(3) - '0'; 
        int f = a.charAt(4) - '0'; 
        int g = a.charAt(5) - '0'; 
        int h = a.charAt(6) - '0'; 
        int i = a.charAt(7) - '0'; 
        int j = a.charAt(8) - '0'; 
        int k = a.charAt(9) - '0'; 
        sum = (int)(Math.pow(b,2) + Math.pow(c,2) + Math.pow(d,2) + Math.pow(e,2) + Math.pow(f,2) + Math.pow(g,2) + Math.pow(h,2) + Math.pow(i,2) + Math.pow(j,2) + Math.pow(k,2)); 
        int y = (int)sum; 
        a = "" + y; 
        if (sum == 1) 
        { 
         System.out.println(x); 
         done = true; 

        } 
       } 
      } 
     } 
    } 
} 
+0

Ваш код, вероятно, застрять в цикле в то время. Вы пробовали отлаживать его, всегда ли установлено значение true? – Levesque

+0

Он застревает в остальных, если петли. Таким образом, это только печать или печать первого номера. Как я могу это исправить? – jmm8398

+0

else, если утверждения не являются петлями, и ваш код не может застрять в них. Это застревает в вашей петле? Я бы предложил вам пройти через него и выяснить, что происходит. – Levesque

ответ

0

обусловленно вы установили

done = true; 

в строке 25

+0

Это может быть проблемой, но это не полное решение. Что именно необходимо для исправления программы? Будет ли работать, если строка 25 удалена? – honk

Смежные вопросы