A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凝聚 中级黑马   /  2013-12-13 11:46  /  1888 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 凝聚 于 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是怎么回事啊?

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

3 个回复

倒序浏览
我们可以来分析一下这个程序,当我们什么也不输入,直接按回车时,输出的是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。

解决办法:
在你输入时,加一个检测。
希望能帮助你

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
侠客梦的懒猫 发表于 2013-12-13 12:08
我们可以来分析一下这个程序,当我们什么也不输入,直接按回车时,输出的是true,这个绝对是你panduan(Stri ...

请问该怎么改啊?
回复 使用道具 举报
在while中加入
if(s.length()==0)
{
                System.out.println("帅哥,给点面子,别一个字符都不输啊!");
                break;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马