你遇到这种错误了么,帮忙看看!!!

hzhello 2003-10-20 11:23:44
我的写的一个算符优先表的FIRST集 程序通过了编译 但运行的时候怎么有错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at myprojects.sfyx.GS.Init(Sfyx.java:26)
at myprojects.sfyx.Sfyx.main(Sfyx.java:78)
Press any key to continue...
谁知道怎么解决,帮忙指点一下!!
程序:
/*算符优先firstvt
*/
package myprojects.sfyx;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.lang.*;
class GS
{
public char[] VT={'-','+','*','^','i','(',')','#'};
public char[] VN={'S','E','T','F','P'};
public String[] left={"S","E","E","T","T","F","F","P","P"};
public String[] right={"#E#","E+T","T","F*T","F","P^F","P","(E)","i"};
char F[][];
int i;
Stack s=new Stack();
String str1=new String();
String str2=new String();
void Init()
{
F=new char[6][9];
int i,j;
for(i=0;i<VN.length+1;i++)
for(j=0;j<VT.length+1;j++)
{
if(i==0)F[i][j]=VT[j];
else if(j==0)F[i][j]=VN[i-1];
else F[i][j]='0';
}
}
void start()
{
for(int i=0;i<9;i++)
{
for(int j=0;j<right.length;j++)
for(int k=0;k<VT.length;k++)
if(right[i].charAt(j)==VT[k])
{
Insert(str1.valueOf(left[i].charAt(0)),str2.valueOf(right[i].charAt(j)));
break;
}
}
while(s.size()!=0)
{
String C;
String D;
C=(String)s.pop();
D=(String)s.pop();
for(int i=0;i<9;i++)
{
if(C==str1.valueOf(right[i].charAt(0)))
Insert(str1.valueOf(left[i].charAt(0)),D);
}
}
for(int i=0;i<VN.length+1;i++)
for(int j=0;j<VT.length+1;j++)
System.out.println(F[i][j]);
}
void Insert(String P,String a)
{
int i,j;
for(i=0;i<VN.length;i++)
if(F[i][0]==P.charAt(0)) break;
for(j=0;j<VT.length;j++)
if(F[0][j]==a.charAt(0)) break;
if(F[i][j]=='0')
{
F[i][j]='1';
s.push(a);
s.push(P);
}
}
}

public class Sfyx {
public static void main(String[] args) {
GS app=new GS();
app.Init();
app.start();
}
}
...全文
28 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzhello 2003-10-22
  • 打赏
  • 举报
回复
多谢!!!
danceflash 2003-10-20
  • 打赏
  • 举报
回复
for(i=0;i<VN.length+1;i++)
for(j=0;j<VT.length+1;j++)
你这两个循环中止条件有问题啊

应该是这样的吧?
for(i=0; i < VN.length; i++)
for(j=0; j < VT.length; j++)
LoveRose 2003-10-20
  • 打赏
  • 举报
回复
当然有问题了,数租越界了
for(i=0;i<VN.length+1;i++)
for(j=0;j<VT.length+1;j++)
{
if(i==0)
F[i][j]=VT[j];
else if(j==0)
F[i][j]=VN[i-1];
else
F[i][j]='0';
}
当i = 0; j = 8时,执行F[i][j] = VT[j]即 F[0][8] = VT[8]
而数组VT的size=8范围时0-7
同样的,代码还有其它的类似这样的错误
comptometer 2003-10-20
  • 打赏
  • 举报
回复
26行数组越界
j=VT.length=8时VT[j]越界

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧