DESKTOP-94E2ELT_20200829-刘雪丽

一、问题

这次字符碎片的题,我在考试结束之后自己尝试这敲了代码,有简单的方法,当然我的就是比较麻烦点的。先上代码:

public class Abc {
    public  void A(String s) {
        byte[] b=s.getBytes();
        int p=0,t=0;
        for(int x=0;x<b.length;x++){
            for(int y=x;y<b.length;y++) {
                if(x==y&x==b.length-1&b[b.length-1]!=b[b.length-2]) {
                    t+=1;
                    ++p;
                    break;
                    }
                if(b[x]!=b[y]) {    
                    ++p;
                    t+=(y-x);
                    x=y-1;
                    break;
                }               
            }           
        }
        double a=(double)t/p;
        System.out.println(a);
    }
    public static void main(String[] args) {
        Abc q=new Abc();
        Scanner e=new Scanner(System.in);
        String  s=e.next();
        q.A(s);
}

有这么一行代码

if(x==y&x==b.length-1&b[b.length-1]!=b[b.length-2])

我一直想不通为啥明明x跟数组长度一样,用x替换数组长度会下标越界,但不换就是正确的?

if(x==y&x==b.length-1&b[x]!=b[x-2])

这样会越界

解决:

我在写日志的时候发现自己就是来搞笑来的,答案很简单,上面只是个条件,本来就没有赋值。结果是这样是对的

if(x==y&x==b.length-1) {
        if(b[b.length-1]!=b[b.length-2]) {
if(x==y&x==b.length-1) {
     if(b[x]!=b[x-1]) {

其实问题在于我用的运算符的时候一直用的&,而不是&&,一个&的时候就算前面条件不满足,后边的也会执行,所以才会有下标越界。

if(x==y&x==b.length-1&&b[x]!=b[x-1]) {

这样就算彻底解决了。

吐槽

吐槽一下我自己,想问题的时候不全面,不通透,还容易钻牛角尖。注意是不够的,应该尽全力避免这种错误。不然就省一顿饭。省钱还减肥。

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1