日期:2014-05-20  浏览次数:20612 次

字符串回文问题,请大家指点
(2)按如下的要求编写程序:检查输入的字符串是否为“回文”。所谓“回文”是指当一个字符串正序读和逆序读时都一样。比如:“level”、“123321”、“我爱我”、“madam”等都是“回文”字符串。(教材P126页6-5题)
实验要求:利用命令行参数输入一个字符串,判断是否为回文

class   Lizhi{
  public   static   void   main(String   args[]){  
          for(int   i=0;i <args.length;i++){
                  System.out.print( "   "+args[i]);

StringBuffer   strBuff=new   StringBuffer(args[i]);
          if(strBuff==strBuff.reverse())    
              System.out.print( "是回文! ");
          else
              System.out.print( "不是回文! ");
    }
  }
}
我编译:   javac   Lizhi.java
    运行:java   Lizhi   123
输出 123是回文
这个不对呀...怎么不输出  123不是回文...该如何改正


------解决方案--------------------
if(strBuff==strBuff.reverse())
这一句有问题啊,strBuff是一个引用,你用==,实际上==两边是相同的引用,reverse方返回一个引用,跟你的原来得仍然一样啊
建议你用equals()或者是toString后equals()
总是不要用==,这是判断地址的,不是比较值的
------解决方案--------------------
class LiZhi{
public static void main(String args[]){
for(int i=0;i <args.length;i++){
System.out.print( " "+args[i]);

StringBuffer strBuff=new StringBuffer(args[i]);
if(strBuff.toString().equals(strBuff.reverse().toString()))
System.out.print( "是回文! ");
else
System.out.print( "不是回文! ");
}
}
}

------解决方案--------------------
用equals()方法进行判断就不会出现你说的那种错误了

这是因为equals()方法在判断两个String的内容是否一致

而==在判断两个String的引用位置是否一致(也就是在内存中指向的地址是否一致)
------解决方案--------------------
if(strBuff==strBuff.reverse())

->

if(args[i]==strBuff.reverse().toString().intern())