2013-10-05 3 views
-1

Я любитель, который пытается научиться программированию.Simple Palindrome Issue

Я пытаюсь сделать палиндром. Однако у меня ошибка в коде.

public class Palindrome { 

    public static void main(String args[]) 
    { 
    String pal = "abc"; 

    public static void check(String pal) 
    { 
     if(pal==null) 
     { 
      System.out.println("Null Value..Exit"); 
     } 
     else 
     { 
      StringBuilder str= new StringBuilder(pal); 
      str.reverse(); 
      System.out.println(str.reverse()); 
     } 
    } 
    } 

} 

Куда я иду не так? Извините, я очень новичок в программировании. Просто пытаюсь учиться!

+5

Вы не можете встраивать функции в Java. –

+1

Прежде всего, прежде чем писать какой-либо код, остановитесь и подумайте, что именно должна делать программа. Какие шаги он должен предпринять? Каким должен быть результат? Как это должно быть структурировано? Перед тем, как начать писать код, планируйте свой план. – Jesper

+1

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

ответ

3

Вам необходимо сделать следующие изменения в коде.

public static void main(String args[]) { 
    String pal = "abc"; 
    check(pal); // Nested methods are not allowed, thus calling the check 
       // method, which is now placed outside main 
} 

public static void check(String pal) { 
    if (pal == null) { 
     System.out.println("Null Value..Exit"); 
    } else { 
     StringBuilder str = new StringBuilder(pal); 

     // I think I confused you by doing the below. 
     // str = str.reverse(); // commenting this 

     str.reverse(); // adding this 
     // str.reverse(); reverse will affect the str object. I just assigned it back to make it easier for you 
     // That's why if you add a SOP with str.reverse, it'll reverse the string again, which will give the original string back 
     // Original string will always be equal to itself. that's why your if will always be true 
     // give a SOP with str.toString, not reverse. 

     // str.toString is used because str is a StringBuilder object and not a String object. 
     if (pal.equals(str.toString())) { // if the string and its reverse are equal, then its a palindrome 
      System.out.println("Palindrome"); 
     } else { 
      System.out.println("Not a Palindrome"); 
     } 
    } 
} 
+0

wow. Это настолько подробно, насколько это возможно! Можете ли вы предложить мне хорошее место, чтобы изучить основы Java? –

+0

@ RockyBalBoa - Здесь вы идете. [Учебник по основам Java] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/). – SudoRahul

+1

@RockyBalBoa - Я также предлагаю вам начать использовать IDE. Это поможет вам исправить мелкие ошибки синтаксиса и избежать проблем с компиляцией. Для логических проблем вы всегда можете вернуться сюда :) – SudoRahul

2

Вы не можете написать один метод внутри другого метода.

public class Palindrome { 

    public static void main(String args[]) 
    { 
    String pal = "abc"; 
check(pal); 

    } 
    public static void check(String pal) 
    { 
     if(pal==null) 
     { 
      System.out.println("Null Value..Exit"); 
     } 
     else 
     { 
      StringBuilder str= new StringBuilder(pal); 
      str.reverse(); 
      System.out.println(str.reverse()); 
     } 
    } 
} 
+0

Большое вам спасибо! –

+1

@ javaBeginner, учитывая это, вы должны добавить вызов функции как 'check (pal);' также – exexzian

0
public static boolean checkPalindrome(String str) { 
    return str.equalsIgnoreCase(new StringBuilder(str).reverse()); 
} 
0
private static boolean isPalindrome(String str) { 
    if (str == null) 
     return false; 
    StringBuilder strBuilder = new StringBuilder(str); 
    strBuilder.reverse(); 
    return strBuilder.toString().equals(str); 
} 

Вы, вероятно, следует сделать это.