1

我试图编写一个回文。它有一个用户输入字符串,程序会判断它是否是回文。我已经在网上搜索了代码,但似乎当我创建了另一种方法时,编译器会说“Nullpointerexception”。我从昨天开始尝试这个,但似乎我无法真正理解它。我的 ICT 课需要它。谢谢你。这是我的代码。

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";
   }
}
4

8 回答 8

4

静态 main 方法中的变量“word”隐藏了Palindrome类的实例变量“word”。因此,您将 Scanner 中的值分配给了错误的变量。

要修复此错误,您有多种选择:

最简单的方法是删除 main 方法中的变量并将类的实例变量重新声明Palindrome为静态。然而,这不是很优雅(也不是面向对象的)。最好将您读取的值作为参数传递给方法palindromeChecker

当然还有很多其他的方法可以做到这一点,但我相信一旦你对这门语言和一般编程有了更深入的了解,你会学到更多的方法。

于 2013-08-14T13:00:28.060 回答
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";
}
于 2013-08-14T12:41:15.177 回答
1

您可以在 main 方法中删除局部变量 'word' 并将全局变量 'word' 和 'reverse' 更改为静态。但最好在您的 palindromeChecker 方法中传递一个字符串参数

于 2013-08-14T12:44:13.447 回答
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");    
   }    }    

}

于 2013-10-26T05:55:11.407 回答
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;
    }
}
}
于 2015-02-02T07:04:24.813 回答
0

String您正在尝试访问回文检查器中的非静态对象。这就是它显示的原因NULLPointerException

您应该尝试以下方法:

    公共类回文
    {
        静态字符串单词,反向=“”;
        公共静态无效主(字符串参数 [])
        {
            扫描仪输入 = 新扫描仪(System.in);
            System.out.println("输入一个字符串,检查是否为回文");
            word = in.nextLine();
            回文检查 = 新回文();
            System.out.println(check.palindromeChecker());
        }

        公共字符串回文检查器()
        {
            字符串反向=“”;
            int 长度 = word.length();

            for (int i = 长度 - 1; i >= 0; i--)
                反向 = 反向 + word.charAt(i);

            if (word.equals(reverse))
                返回“回文”;
            别的
                返回“不是回文”;

        }
     }
于 2014-04-29T11:16:27.940 回答
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;
}
}
于 2015-08-07T07:13:29.463 回答
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";

    }
 }
于 2016-07-22T04:15:37.530 回答