黑马程序员技术交流社区

标题: 要打印出j出现是次数 可是一直输出0为什么 [打印本页]

作者: 公孙国禄    时间: 2016-3-13 23:39
标题: 要打印出j出现是次数 可是一直输出0为什么
public class MyJava {
        public static void main(String[] args) {
                String srt = "woyaoxuejava,xihuanjava,aijava,javajavawozuiai" ;
                char[] ch=srt.toCharArray();
                int x = 0;
                for (int i = 0; i < ch.length; i++) {
                        String a = ch[i]+"";
                        if (a == "j") {
                                x++;
                               
                                break;
                        } else {
                                continue;
                        }
                       
                }
                System.out.println(x);
        }
}

作者: 霸道总裁爱村花    时间: 2016-3-14 07:49
public class MyJava {
    public static void main(String[] args) {
            String srt = "woyaoxuejava,xihuanjava,aijava,javajavawozuiai" ;
            char[] ch=srt.toCharArray();
            int x = 0;
            for (int i = 0; i < ch.length; i++) {
                    //String a = ch[i]+"";//不用做类型转换
                    if (ch[i]== 'j') {
                            x++;
                           
//                            break;
//                    } else {
//                            continue;
                    }
                  
            }
            System.out.println(x);
    }
}
判断两个字符是否一样直接用==,不用类型转来转去这么麻烦
另外建议楼主认真看看break和continue的区别
break是直接跳出循环,continue是结束本次循环,继续下一次
也就是说即使你前面的代码对了,结果也只会是1
作者: 骓逝    时间: 2016-3-14 16:17
如果你非要比较两个字符串,别用==判断,用equals方法判断,还有就是if后面不要加break;加了表示退出循环,只要匹配到一个正确后面就不会做循环了,
现在我有一个问题对于你写的这个方法:a == "j"会一直为false?你前面应该会在常量池添加一个String a = ch[i]+"";的字符串,就算是用==号比较的是地址值,那也应该判断为true才对
作者: 骓逝    时间: 2016-3-14 16:30
我知道了字符串做拼接用XJAD看原码可以知道做拼接做的操作是new了一个StringBuider的所以地址会不一样,。。。
作者: liu631980435    时间: 2016-3-14 22:02
这写的真不错,




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