2016-07-10 5 views
1

У меня возникли проблемы с выяснением, почему мой код не работает. По сути, я пытаюсь закодировать Project Euler # 4, который пытается определить самый большой номер палиндрома, который можно получить при умножении двух трехзначных чисел. Этот код, похоже, не работает (он будет компилироваться). Всякий раз, когда я выполняю код, он просто печатает «0». Я знаю, что это может быть не алгоритмически эффективным, но что я делаю неправильно?Project Euler # 4: Java

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

    int largestnum = 0; 
    Palindrome pp = new Palindrome(); 

    for (int i = 100; i <= 999; i++) { 
     for (int k = 100; k <= 999; k++) { 
      if (pp.checkPal(i * k) == true) { 
       largestnum = i * k; 
      } 
     } 
    }   

    System.out.println(largestnum); 
} 


public boolean checkPal(int y) { 
    String snum = Integer.toString(y); 
    int snum_length = snum.length() - 1; 
    String palindrome = new String(""); 

    for (int i = snum_length; i >= 0; i--) { 
     palindrome.concat(Character.toString(snum.charAt(i))); 
    } 

    if (snum.equals(palindrome)) { 
     return true; 
    } 
    else { 
     return false; 
    }  
} 
} 
+1

Lean использовать отладчик, это сэкономит вам много часов в долгосрочной перспективе. –

+1

У вас есть оператор 'println' в цикле for. –

+0

О стрелять. Просто осознал это. Благодарю. – priya

ответ

3

Строки в Java неизменяемы.

Вы делаете:

palindrome.concat(Character.toString(snum.charAt(i))); 

Это выражение, которое возвращает новую строку, которая является конкатенацией palindrome и Character.toString(snum.charAt(i)). Он делает не изменить palindrome.

Вы можете исправить это следующим образом:

palindrome = palindrome.concat(Character.toString(snum.charAt(i))); 

Хотя было бы лучше использовать StringBuffer или StringBuilder для создания строк.

+0

Спасибо! Это работает. – priya

1

Возможно, вы получаете эти пробелы, потому что у вас есть оператор печати внутри функции checkPal.

Кроме того, когда вы делаете palindrome.concat вам нужно назначить палиндром результата следующим образом: palindrome = palindrome.concat(Character.toString(snum.charAt(i)));

+0

Ahhh, да. Это работает, но я думаю, мне не хватает сравнения, чтобы найти самый большой палиндром. Спасибо. – priya