你遇到这种错误了么,帮忙看看!!!
我的写的一个算符优先表的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();
}
}