char-是循环条件写错了么?一直报异常

问题描述

是循环条件写错了么?一直报异常

public class next {
public void getnext(char s[],int next[])
{
int j=0;
int k=-1;
next[0]=-1;
while(s[j]!='')
{
if(k==-1)
{
next[++j]=0;
k=0;
}
else if(s[j]==s[k])
{
k++;
next[++j]=k;
}
else
{
k=next[k];
}
}
}

}

public class kmp {
public int kmp(char t[],char s[])
{
int i=0,j=0;
int []nex=new int[80];
next n=new next();
n.getnext(s,nex);
while(t[i]!=''&&s[j]!='')
{
if(t[i]==s[j])
{
i++;
j++;
}
else
{
j=nex[j];
if(j==-1)
{
i++;
j++;

            }
        }
    }
    if(s[j]=='')
    {
        return(i-s.length+1);
    }
    else
    {
        return 0;
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    char []t={'q','w','e','r','s','a','a'};
    char []s={'s','a'};
    kmp k=new kmp();
    System.out.print(k.kmp(t, s));
}

}

解决方案

另外你可以google java kmp算法找一个现成的程序参考下,看得出你连基本语法都还不会。

解决方案二:

public void getnext(char s[],int next[])
应该是
public void getnext(char[] s,int[] next)
吧,你用的看上去是Java,可是怎么混杂着C++的语法。

解决方案三:

while(s[j]!=''),你这条件会为false吗?死循环,导致j数组越界。
这写法有点C语言的风格。

解决方案四:

数组 t 和 s 的数据都没有字符串结束符的,所以用 == 0 作为判断是错误的。如果将等于的判断写成赋值,就更加的错误了!

解决方案五:

如果你的代码就是这么一点的话,你的j没变,如果s[j]是不等于,那么就是一个死循环

解决方案六:

不好意思,看错了

解决方案七:

如果不满足条件应该是数组过界

解决方案八:

next 容易 混淆,换个大写的My_next 如何

时间: 2024-11-02 05:26:29

char-是循环条件写错了么?一直报异常的相关文章

vs2012中for循环循环条件作用域

问题描述 vs2012中for循环循环条件作用域 for(int i = 0; i < 4; i++);int i = 2;printf(""%d""i);//这里输出是4int *pi = &i; *pi = 1;printf(""%d""i);//这里输出也是4//这里的i值无法修改.... 没有悬赏分 就是分享给大家 虽然我也不知道是为什么,但是遇到这个问题了,调试了很久 解决方案 C++的for循环作用域

为什么循环条件不同呢?

问题描述 voidinsert_linklist(inti,typedatax){lnode*s,*p;intj=0;s=(lnode*)malloc(sizeof(lnode));s->data=x;if(i<1){printf("输入位置不合法n");free(s);return;}else{p=H;while(p!=NULL&&j<i-1){p=p->next;j++;}if(p!=NULL){s->next=p->next;p

循环哪里出错了,逻辑错误查找,高手帮帮忙

问题描述 循环哪里出错了,逻辑错误查找,高手帮帮忙 #include int main() { int donation=0,amount=0; //donation代表每次捐献的金额,amout代表总额 while(amount<10) //捐款超过十万就不再接受捐献 { scanf("%dn",&donation); amount=amount+donation; } printf("%d",amount); return 0; } 为什么每次输入

《编写高质量Python代码的59个有效方法》——第12条:不要在for和while循环后面写else块

第12条:不要在for和while循环后面写else块 Python提供了一种很多编程语言都不支持的功能,那就是可以在循环内部的语句块后面直接编写else块. 奇怪的是,这种else块会在整个循环执行完之后立刻运行.既然如此,那它为什么叫做else呢?为什么不叫and?在if/else语句中,else的意思是:如果不执行前面那个if块,那就执行else块.在try/except语句中,except的定义也类似:如果前面那个try块没有成功执行,那就执行except块. 同理,try/except

上传ftp出错 请帮忙-上传ftp出错,刚刚提问写错了,请帮忙

问题描述 上传ftp出错,刚刚提问写错了,请帮忙 strm = reqFTP.GetRequestStream(); strm.Write(buff, 0, buff.Length); strm.Dispose(); strm.Close(); 到了strm.Dispose();时就报错: The remote server returned an error: (550) File unavailable (e.g., file not found, no access). 解决方案 You

编程-C51左循环函数调用出错了

问题描述 C51左循环函数调用出错了 这个是什么问题,是因为我的函数库没有在正确位置吗.我已经知道dalay那个错误了可是函数调用还是有问题啊 解决方案 函数corl 改成 crol 你名字打错了

循环条件-C语言循环的问题,怎么就成了死循环呢?

问题描述 C语言循环的问题,怎么就成了死循环呢? void countdigst(int last_numberint *count_arry){ int i; for(i= 1;i <= last_number;i++) { //不满足while后i=0,此时为什么i每次进来为1而没有自增为下一个数呢? //也就是为//什么没有执行i++? int temp = 0; while( i != 0) { temp = i%10; count_arry[temp]++; i /= 10; } }

struts2.0-初学Struts2,总是出现404问题,不知道是哪里写错了,实在是找不到,求大神们帮忙。。

问题描述 初学Struts2,总是出现404问题,不知道是哪里写错了,实在是找不到,求大神们帮忙.. jsp页: Struts.xml: <?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://strut

oracle-LINUX下使用.sql脚本,不知道是那里写错了!求解答!

问题描述 LINUX下使用.sql脚本,不知道是那里写错了!求解答! 进入oracle用户后获取DBA权限运行.sql文件sqlplus / as sysdba @create_user.sql以下是.sql文件命令,主要是用来创建表空间和用户的.------------------------创建表空间---------------------------CREATE TABLESPACE ids DATAFILE '/u01/oradata/orcl/ids.dbf' SIZE 200m A