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

静的メイン メソッドの変数「word」は、Palindromeクラスのインスタンス変数「word」を非表示にします。したがって、 Scanner からの値を間違った変数に割り当てています。

このエラーを修正するには、いくつかのオプションがあります。

簡単な方法は、メイン メソッドの変数を削除し、クラスのインスタンス変数をPalindrome静的に再宣言することです。ただし、これはあまりエレガントではありません (オブジェクト指向ではありません)。読み取った値を引数としてメソッドに渡す方がよいでしょうpalindromeChecker

もちろん、これを行うには他にも多くの方法がありますが、この言語とプログラミング全般についてより深く理解すれば、より多くの方法を学ぶことができると確信しています。

于 2013-08-14T13:00:28.060 に答える
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

変数のスコープの問題を修正することに加えて。次のコードを使用すると、アルゴリズムがより効率的になる可能性があると思います。

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 に答える