0

次のコードは機能しませんでした。次のコードの何が問題なのか誰か教えてください。論理的にはうまくいくはずです...

package assignments;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class IsPalindrome {
public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(
                                      new InputStreamReader(System.in));
    System.out.println("Enter a Word:");
    StringBuffer sb1 = new StringBuffer(br.readLine());
    StringBuffer sb2 = new StringBuffer(sb1);
    sb1.reverse();

    if(sb2.equals(sb1))
        System.out.println("Palindrome");
    else
        System.out.println("Not a Palindrome");
}
}
4

3 に答える 3

10

試す

sb1.toString().equals(sb2.toString());

StringBuffer#toStringメソッドは、バッファ内に格納されているデータの String 値を返すため:

このシーケンスのデータを表す文字列を返します。新しい String オブジェクトが割り当てられ、このオブジェクトによって現在表されている文字シーケンスを含むように初期化されます。この文字列が返されます。このシーケンスに対するその後の変更は、文字列の内容には影響しません。

于 2013-06-14T14:13:22.277 に答える
5

StringBuffer クラスequalsでは、メソッドはクラスのようにオーバーライドされませんStringStringBuffer参照が同じであるかどうかを確認するだけです。したがって、まずそれを文字列に変換してから equals メソッドを使用する必要があります。

だからやってみる

sb1.toString().equals(sb2.toString());
于 2013-06-14T14:30:01.657 に答える
0

あなたは書ける

System.out.println("Enter a line:");
String line = br.readLine().replace(" ", ""); // palindromes can have spaces
String reverse = new StringBuilder(sb1).reverse().toString();

if(line.equals(reverse))
    System.out.print("Not a ");
System.out.println("Palindrome");
于 2013-06-14T14:50:04.310 に答える