0

有人可以指出我程序中的错误吗?

输出总是:“它不是回文”

String newstr="";
for(int j=length-1;j>0;j--)
{
    char m=str.charAt(j);
    newstr=newstr+m;
}
if(newstr.equals(str) )
    System.out.println("it is a palindrome");
else
    System.out.println("it is not a palindrome");

提前致谢:)

4

6 回答 6

3

首先,使用String.equals()比较字符串而不是==.

if(newstr.equals(str))

此外,字符串索引从 0 开始,因此您需要:

for(int j=length-1;j>=0;j--)

这两个修复程序都应该有效。

于 2013-05-22T11:30:04.950 回答
3
if(newstr==str)

应该是

if ( newstr.equals( str ) )

并阅读对象比较。您实际上是在比较两个指针,而不是字符串内容。

当然,对于 Java 5 及更高版本,您可以这样做

new StringBuilder( str ).reverse().toString().equals( str );

干杯,

于 2013-05-22T11:30:44.403 回答
2

数组的索引从 0 开始。我想你应该使用

for(int j=length-1;j>=0;j--)

代替

for(int j=length-1;j>0;j--)
于 2013-05-22T11:31:31.130 回答
1

== 运算符检查两个引用是否指向同一个对象。.equals() 方法实际上会检查字符串的内容。

所以你的代码必须是

    if(newstr.equals(str))
    System.out.println("it is a palindrome");
    else
    System.out.println("it is not a palindrome");
于 2013-05-22T11:32:13.757 回答
0
public static boolean isPaliandrome(String str) {
        StringBuilder lettersBuff = new StringBuilder(str);
        String str_inverse = lettersBuff.reverse().toString();
        char[] charArrayInverse = str_inverse.toCharArray();
        boolean isPaliandrome = false;
        String caracInverseConverted = new String(charArrayInverse);
        if (str.equals(caracInverseConverted)) {
            isPaliandrome = true;
        }
        return isPaliandrome;
    }
于 2013-11-08T09:54:08.820 回答
0

==测试参考相等。

.equals()测试值相等。

因此,如果你真的想测试两个字符串是否具有相同的值,你应该使用.equals()(除了在少数情况下,你可以保证两个具有相同值的字符串将由同一个对象表示

这将是最终代码。阅读java中的字符串比较

  String newstr="";

   for(int j=length-1;j>0;j--)
   {
       char m=str.charAt(j);
       newstr=newstr+m;
    }
    if(newstr.equals( str ) )
    System.out.println("it is a palindrome");
    else
    System.out.println("it is not a palindrome");
于 2013-05-22T11:32:54.527 回答