2013-08-14 4 views
1

Im пытается кодировать палиндром. Он имеет строку ввода пользователя, и программа сообщит, является ли это палиндром или нет. Я искал сеть для кода, но кажется, что когда я создал другой метод, и когда компилируется, компилятор говорит, что «Nullpointerexception». Я пытаюсь сделать это со вчерашнего дня, но, похоже, я не могу это понять. Мне это нужно для нашего класса ИКТ. Спасибо. это мой код.Как проверить, является ли строка палиндром или нет?

import java.util.Scanner; 

public class Palindrome { 
    String word, reverse=""; 
    public static void main(String args[]){ 
     String word; 
     Scanner in = new Scanner(System.in); 
     System.out.println("Enter a string to check if it is a palindrome"); 
     word = in.nextLine(); 
     Palindrome check = new Palindrome(); 
     check.palindromeChecker(); 
    } 

    public String palindromeChecker(){ 
     int length = word.length(); 

     for (int i = length - 1 ; i >= 0 ; i--) 
     reverse = reverse + word.charAt(i); 

     if (word.equals(reverse)) 
     return "Palindrome"; 
     else 
     return "Not a Palindrome"; 
    } 
} 
+2

Пожалуйста опубликовать полную ошибку. – thegrinner

+6

Переменная «word» в вашем статическом главном методе скрывает переменную экземпляра «слово» вашего класса Palindrome. Таким образом, вы присваиваете значение из сканера неправильной переменной. – Matthias

+1

Исключения выбрасываются во время выполнения. Вы должны различать время компиляции и время выполнения. – alex

ответ

1

Этого достаточно, чтобы проверить палиндром

String str="abccba"; 
    String newStr=new StringBuilder(str).reverse().toString(); 
    if(str.equals(newStr)){ 
     System.out.println("is palindrome"); 
    } else{ 
     System.out.println("not a palindrome"); 
    } 

Но все же вы хотите сделать это в трудном пути изменить код следующим образом

public static void main(String[] args) throws ParseException { 
    String word; 
    Scanner in = new Scanner(System.in); 
    System.out.println("Enter a string to check if it is a palindrome"); 
    word = in.nextLine(); 
    System.out.println(palindromeChecker(word)); 
} 
public static String palindromeChecker(String word){ 
    int length = word.length(); 
    String reverse=""; 
    for (int i = length - 1 ; i >= 0 ; i--) 
     reverse = reverse + word.charAt(i); 
    if (word.equals(reverse)) 
     return "Palindrome"; 
    else 
     return "Not a Palindrome"; 
} 
+0

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

+0

говорится, что он не может найти символ ParseException – gundamjans

1

Вы можете удалить локальные переменную «слова 'в основном методе и изменить глобальную переменную' word 'и' reverse 'to static. Но лучше передать параметр String в вашем методе palindromeChecker

4

Переменная «word» в вашем статическом основном методе скрывает переменную экземпляра «слово» вашего класса Palindrome. Значит, вы присваиваете значение Scanner неправильной переменной.

Чтобы исправить эту ошибку, у вас есть несколько вариантов:

легкий путь будет удалить переменный в главном методе и переобъявить переменный экземпляр вашего класса Palindrome быть статичными. Это, однако, не очень элегантно (а не объектно-ориентированное). Лучше было бы передать значение, которое вы читаете как аргумент метода palindromeChecker.

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

+0

О, спасибо! Вы действительно объяснили это, как мой учитель. Ха-ха. Надеюсь, что так, я думаю, что после окончания средней школы буду заниматься информатикой.Просто поделитесь. Еще раз спасибо! – gundamjans

+0

Мое удовольствие. Каждый вопрос, показывающий немного усилий, найдет людей, желающих ответить на этом сайте. – Matthias

0
{ Scanner s=new Scanner(System.in);  
System.out.println("enter the string:");  
String str=s.nextLine().toString();  
    String newStr=new StringBuilder(str).reverse().toString();  
    if(str.equals(newStr)){  
     System.out.println("is palindrome");  
    } else{  
     System.out.println("not a palindrome");  
    } }  

}

+0

Можете прокомментировать код? – user35443

0

Вы пытаетесь получить доступ к нестатический String объекта внутри палиндром проверки. Вот почему он показывает NULLPointerException.

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

 
    public class Palindrome 
    { 
     static String word, reverse=""; 
     public static void main(String args[]) 
     { 
      Scanner in = new Scanner(System.in); 
      System.out.println("Enter a string to check if it is a palindrome"); 
      word = in.nextLine(); 
      Palindrome check = new Palindrome(); 
      System.out.println(check.palindromeChecker()); 
     } 

     public String palindromeChecker() 
     { 
      String reverse=""; 
      int length = word.length(); 

      for (int i = length - 1; i >= 0; i--) 
       reverse = reverse + word.charAt(i); 

      if (word.equals(reverse)) 
       return "Palindrome"; 
      else 
       return "Not a Palindrome"; 

     } 
    } 
0
package ispolidrom; 

import java.util.Scanner; 

public class IsPolidrom { 


    public static void main(String[] args) { 
    int number; 
    Scanner input= new Scanner(System.in); 
    System.out.print("\n Enter number: "); 
    number=input.nextInt(); 

      if(isPolidrome(number)) { 
       System.out.printf("\n %d is polidrome",number); 
      } 

      else { 
       System.out.printf("\n %d is NOT polidrome",number); 

      } 

} 

public static boolean isPolidrome(int myNum) { 
    String numStr; 
     numStr=Integer.toString(myNum); 

    String revNum; 
    StringBuffer buffer= new StringBuffer(numStr); 
     revNum=buffer.reverse().toString(); 

    if(numStr.equals(revNum)) { 
     return true; 
    } 

    else { 
     return false; 
    } 
} 
} 
0

Кроме того, фиксация переменной проблемы области видимости. Я думаю, что алгоритм может быть более эффективным с помощью следующего кода,

public class Palindrome { 

public static void main(String[] args){ 

    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Enter a string to check if it is a palindrome"); 
    String word = keyboard.nextLine(); 

    if(isPalindrome(word)) 
     System.out.println(word + " is a Palindrome"); 
    else 
     System.out.println(word + " is not a Palindrome"); 


} 


public static boolean isPalindrome(String word){ 
    int length = word.length(); 
    //loop until i reaches the midpoint index 
    for(int i = 0; i < length/2 ; i++){ 
     //compare first char with last, second with second last 
     //and so on until it reaches the mid point 
     if(word.charAt(i) != word.charAt(length-i-1)) 
      return false; 
    } 
    return true; 
} 
} 
0
public class Palindrome 
    { 
     static String word, reverse=""; 
     public static void main(String args[]) 
     { 
      Scanner in = new Scanner(System.in); 
      System.out.println("Enter a string to check if it is a palindrome"); 
      word = in.nextLine(); 
      Palindrome check = new Palindrome(); 
      System.out.println(check.palindromeChecker()); 
     } 

    public String palindromeChecker() 
    { 
     String reverse=""; 
     int length = word.length(); 

     for (int i = length - 1; i >= 0; i--) 
      reverse = reverse + word.charAt(i); 

     if (word.equals(reverse)) 
      return "Palindrome"; 
     else 
      return "Not a Palindrome"; 

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