2016-12-17 3 views
-1

я писал:Проект Эйлера # 4 Java - Нет выхода

class Problem4 { 
    public static void main(String[] args) { 
    int reversenum = 0; 
    for (int i=100; i<1000; i++) { 
     for (int j=100; j<1000; j++) { 
     int tempPro = i*j; 
     int temptempfun = tempPro; 
     while (tempPro != 0) { 
      reversenum *= 10; 
      reversenum += tempPro%10; 
      tempPro /= 10; 
     } 
     if (reversenum == temptempfun) { 
      System.out.println(reversenum); 
     } 
     } 
    } 
    } 
} 

Я не получаю никакого вывода, когда я запускаю это, и я не могу понять, что я делаю неправильно.

РЕДАКТИРОВАТЬ:

Фиксированный его путем перемещения декларации reversenum внутри внутренний цикл.

class Problem4 { 
    public static void main(String[] args) { 
    int largest = 0; 
    for (int i=100; i<1000; i++) { 
     for (int j=100; j<1000; j++) { 
     int tempPro = i*j; 
     int temptempfun = tempPro; 
     int reversenum = 0; 
     while (tempPro != 0) { 
      reversenum *= 10; 
      reversenum += tempPro%10; 
      tempPro /= 10; 
     } 
     if (reversenum == temptempfun) { 
      if (reversenum > largest) { 
      largest = reversenum; 
      } 
     } 
     } 
    } 
    System.out.println(largest); 
    } 
} 
+1

Попробуйте положить другое, чтобы узнать, что это за цифры и подумать? – doctorlove

+0

Постарайтесь сопоставить их заданное двузначное число, которое будет быстрее отлаживаться в любом случае, затем попробуйте 3 цифры. – doctorlove

ответ

0

В этой строке:

int reversenum = 0; 

вы определяете reversenum как ноль и в то время как петля:

while (tempPro != 0) { 
      reversenum *= 10; 

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

EDIT:

Вам нужно отлаживать код в интегрированной среде разработки, такие как Eclipse. Если вы это сделаете, вы сможете легко понять, что происходит в вашем коде.

+0

Ваш ответ частично правильный. Я просто исправил свой код, перемещая декларацию обратного хода во внутреннем цикле. – iFlames

3

Два целых числа reverseenum и temptempfun не равны в вашем цикле. Вот почему он ничего не может напечатать.

0

Понятно, что reversenum является попыткой изменить число (для проверки на палиндром), поэтому его необходимо изменить каждый раз (без ущерба для предыдущих попыток).

Кроме того, умножая его на 0, оно останется равным нулю, когда оно равно нулю.

Это что-то напечатает (но вам нужно подумать о том, как найти ответ, который вам действительно нужен).

class Problem4 { 
    public static void main(String[] args) { 
    for (int i=100; i<1000; i++) { 
     for (int j=100; j<1000; j++) { 
     int reversenum = 0; //<- moved to change each time 
     int tempPro = i*j; 
     int temptempfun = tempPro; 
     while (tempPro != 0) { 
      reversenum *= 10; 
      reversenum += tempPro%10; 
      tempPro /= 10; 
     } 
     if (reversenum == temptempfun) { 
      System.out.println(reversenum); 
     } 
     } 
    } 
    } 
} 
+0

Когда вы меняете эти две строки в цикле while, это умножит окончательное число на 10 и даст неверный результат. Я сделал и работает правильно. – iFlames

+0

Рад, что вы его исправили – doctorlove

+0

Не знаю, почему я поменял местами - вернул их обратно – doctorlove

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