开发者社区> 问答> 正文

java数组ArrayIndexOutOfBoundsException异常

具体在class Find中的buildNext函数里
似乎是下标越界

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String P;
        String T;
        while(input.hasNext())
        {
            P=input.next();
            T=input.next();
            Find op = new Find(T,P);
            System.out.println(op.getCount());
        }
    }
}

class Find{
    private int count;
    private String T;
    private String P;
    private int[] next;
    private void buildNext(){
        int i=0;
        int j=-1;
        while(j<P.length()){
            if(j==-1||P.charAt(i)==P.charAt(j)){
                ++i; ++j;
                next[i]=j;
            }else{
                j=next[j];
            }
        }
    }
    public Find(String T,String P){
        next=new int[P.length()];
        next[0]=-1;
        this.T=T; this.P=P;
        count=0;
        buildNext();
        KMP();
    }
    public int getCount(){
        return count;
    }
    private void KMP(){
        int i=0,j=0;
        while(i<T.length()){
            if(j<0||T.charAt(i)==P.charAt(j)){
                ++i; ++j;
            }else{
                j=next[j];
            }
            if(j==P.length()){
                ++count;
                j=next[j];
            }
        }
    }
}

debug了挺久似乎看不出来哪出问题了?

展开
收起
因为相信,所以看见。 2020-05-25 15:11:45 1104 0
2 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

    我只说一点,i和j是同步增长的,j比i小1,同时条件是j<P.length()
    如果还是不明白,请拿笔在纸上画一下

    ![image.png](https://ucc.alicdn.com/pic/developer-ecology/db0929a92df74d50b67509e9188e5816.png)
    2020-05-25 17:54:03
    赞同 展开评论 打赏
  • 精于基础,广于工具,熟于业务。

    if(j==-1||P.charAt(i)==P.charAt(j)){ ++i; ++j; next[i]=j; }else{ j=next[j]; }

    debug时重点看下这部分的逻辑,最好进去看

    2020-05-25 16:50:11
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载