在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ java數(shù)組ArrayIndexOutOfBoundsException異常

java數(shù)組ArrayIndexOutOfBoundsException異常

具體在class Find中的buildNext函數(shù)里
似乎是下標(biāo)越界

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了挺久似乎看不出來哪出問題了?
回答
編輯回答
半心人

我只說一點(diǎn),i和j是同步增長(zhǎng)的,j比i小1,同時(shí)條件是j<P.length()
如果還是不明白,請(qǐng)拿筆在紙上畫一下

2017年11月21日 18:24