黑马程序员技术交流社区

标题: 判断一个字符串是否是对称字符串的疑问 [打印本页]

作者: 凝聚    时间: 2013-12-13 11:46
标题: 判断一个字符串是否是对称字符串的疑问
本帖最后由 凝聚 于 2013-12-14 12:50 编辑

package two;
//判断一个字符串是否是对称字符串
//例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
import java.util.*;
import java.io.*;
public class di2 {
        public static void main(String[] args) throws Exception{
                System.out.println("请输入字符");
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                String s=null;
                while((s=br.readLine())!=null)
                {
                        if("over".equals(s))
                                break;
                System.out.println(s+":"+panduan(s));
                }
        }
public static boolean panduan(String str)
{
   if(str==null)
            return false;

        for(int i=0;i<str.length()/2;i++)
         {
            if(str.charAt(i)!=str.charAt(str.length()-i-1))
                    {
                             return false;
                    }
          }
return true;
}
}
这段代码运行后,什么都不输入可是它显示TRUE是怎么回事啊?


作者: 侠客梦的懒猫    时间: 2013-12-13 12:08
我们可以来分析一下这个程序,当我们什么也不输入,直接按回车时,输出的是true,这个绝对是你panduan(String str)函数的作用。

那么可以接着测试panduan(String str)

第一步:
在panduan(String str)函数中加入两个语句
System.out.println(str==null);
System.out.println(str.length());
当加完后,第一个输出false,第二个输出0,,这样结果不就明了。

第二步:
既然第一个输出false,说明
if(str==null)
            return false;
这个不执行
既然第二个输出0,说明不执行 for,直接返回true。

解决办法:
在你输入时,加一个检测。
希望能帮助你
作者: 凝聚    时间: 2013-12-14 10:35
侠客梦的懒猫 发表于 2013-12-13 12:08
我们可以来分析一下这个程序,当我们什么也不输入,直接按回车时,输出的是true,这个绝对是你panduan(Stri ...

请问该怎么改啊?
作者: 侠客梦的懒猫    时间: 2013-12-14 12:04
在while中加入
if(s.length()==0)
{
                System.out.println("帅哥,给点面子,别一个字符都不输啊!");
                break;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2