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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 烟海 中级黑马   /  2014-8-4 22:35  /  2129 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 烟海 于 2014-8-4 22:37 编辑

求帮忙看一下我这一题,哪儿逻辑有问题。。。输出的结构总是不对。。。
我是希望被找出我写的代码中的逻辑问题。。不需要帮我写出别的解决方法,谢谢。。。
package cn.itcast;
/*
* 匹配5-15位数字,首位非0
*/
public class Demo4 {

        public static void main(String[] args) {
                String s = "1032aa20";
                System.out.println(checkQQ(s));

        }
       
        public static boolean checkQQ(String QQString)
        {
                boolean flag = true;

                if(QQString.charAt(0)!=0)
                {
                        if (QQString.length()>15 || QQString.length()<5 )
                        {
                                flag = false;
                        }else
                                {
                                for (int i = 0; i < QQString.length(); i++) {
                                       
                                        if(QQString.charAt(i)<'0' && QQString.charAt(i)>'9')
                                        {       
                                                flag = false;
                                                break;
                                        }
                                }
                        }
                }
                else
                {
                        flag =false;
                }
                return flag;               
        }

}




14 个回复

倒序浏览
发代码格式的,总是出问题。。。所以编辑了重新发的。。。。。。
要求:判断String s 是否为5-15位的纯数字。。。而且要求首位为非0的数字。。。
回复 使用道具 举报

  1. if(QQString.charAt(i)<'0' && QQString.charAt(i)>'9')//这里是或的关系,不是与
复制代码

回复 使用道具 举报

感谢楼上回答。。。。这确实是个问题。。。不过除了这个问题。。还有别的问题。。。
回复 使用道具 举报
正则表达式应该是最简单的方法吧。
回复 使用道具 举报
if(QQString.charAt(0)!=0)改成 if(QQString.charAt(0)!='0')  因为charAt()方法返回值是char
回复 使用道具 举报
本帖最后由 燿陚√揚葳 于 2014-8-5 00:18 编辑

      for (int i = 0; i < QQString.length(); i++) {
                                       
                                        if(QQString.charAt(i)<'0' && QQString.charAt(i)>'9')
                                        {        
                                                flag = false;
                                                break;
                                        }
                                }
首先如果这个字符串中有字母的话if判断中的flag=false不会执行的,这个你知道的吧,不满足条件不执行,所以这个时候就直接返回flag了,也就是true,为了避免这个问题,在这个if判断后面还要继续判断才行
你可以这样判断
  1. for (int i = 0; i < s.length(); i++) {

  2. if(s.charAt(i)>='0' && s.charAt(i)<='9'){
  3. flag = true;
  4. }
  5. else{
  6. System.out.println("ok");
  7. flag=false;
  8. }

  9. }
复制代码
这样的话就不要加,break了,不然会出现之判断一次的就退出了,结果还是错的

当然按照你的方法也可以这样判断
  1. if(s.charAt(i)<'0' && s.charAt(i)>'9')
  2. {
  3. flag = false;
  4. break;
  5. }
  6. else if(s.charAt(i)>='a'&&s.charAt(i)<='z'){
  7. flag=false;
  8. }
复制代码
再判断一下,不然直接返回flag=true了,我简单的写了,希望能帮上忙


回复 使用道具 举报
DSY 中级黑马 2014-8-5 00:09:27
8#
  1.   if(QQString.charAt(0)!=0) //charAt(index)方法返回的是字符类型,改成
  2. if(QQString.charAt(0)!='0')
复制代码

点评

不错。这个地方都注意到了。。很睿智。。。。。  发表于 2014-8-5 00:36
回复 使用道具 举报
唕 发表于 2014-8-4 23:50
if(QQString.charAt(0)!=0)改成 if(QQString.charAt(0)!='0')  因为charAt()方法返回值是char

这个地方我开始也没注意。。。。
不错。。迅速就能看出这个错误,,很牛叉。。。
回复 使用道具 举报
燿陚√揚葳 发表于 2014-8-5 00:07
for (int i = 0; i < QQString.length(); i++) {
                                       
        ...

感谢回复。。
不过这地方。。if(s.charAt(i)<'0' && s.charAt(i)>'9')
这个判断的意思,是在非数字范围内(非0-9之间),就返回false ,
而这一题,出现一个字符,就直接返回false了,所以这儿只要在非数字范围内,就直接得到false ,然后break跳出所有循环,直接return false了。。

所以不需要用if else进行判断了。。。。
不过还是感谢回复。。。
回复 使用道具 举报
QQString.charAt(0)返回的是Unicode编码,不能直接和0比较,0的Unicode编码是48
回复 使用道具 举报
烟海 发表于 2014-8-5 00:35
感谢回复。。
不过这地方。。if(s.charAt(i)'9')
这个判断的意思,是在非数字范围内(非0-9之间),就返 ...

if(s.charAt(i)<'0' && s.charAt(i)>'9')
这个并不是在非数字范围内(非0-9之间),就返回false,而是 s.charAt(i) 大于57 小于 48 相当于
if(false)
好像有人说过了
回复 使用道具 举报
来晚了。...........
回复 使用道具 举报
你这一大串代码正则一句话就搞定了flag = s.matches("[1-9]\\d{4,14}")?true:false;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马