多谢各位大人帮忙,菜鸟又有问题了!!急!

hzhello 2003-10-22 11:01:41
在各位大人的指点下,跌跌撞撞写了个优先表生成算法,好不容易找的编译pass了,但是运行的时候却总是有个错误,奇怪的是改动一点点错误行数怎么也不变一下!!老是这样的错误:
- + * ^ i ( ) #
S 0 0 0 0 0 0 0 1
E 0 1 1 1 1 1 0 0
T 0 0 1 1 1 1 0 0
F 0 0 0 1 1 1 0 0
P 0 0 0 0 1 1 0 0
- + * ^ i ( ) #
S 0 0 0 0 0 0 0 1
E 0 1 1 1 1 0 1 0
T 0 0 1 1 1 0 1 0
F 0 0 0 1 1 0 1 0
P 0 0 0 0 1 0 1 0Exception in thread "main" java.lang.NullPointerExcep
tion
at myprojects.sfyx.SFFORM.Pand(Sfyx.java:188)
at myprojects.sfyx.Sfyx.main(Sfyx.java:241)
Press any key to continue...

请达人再看看!

程序:
/*算符优先
*/
package myprojects.sfyx;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.lang.*;
class Firstvt
{
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[][];
Stack s=new Stack();
String str1=new String();
String str2=new String();
void Init()
{
F=new char[VN.length+1][VT.length+1];
int i,j;
for(j=1;j<VT.length+1;j++)
{
F[0][j]=VT[j-1];
}
for(i=1;i<VN.length+1;i++)
{
F[i][0]=VN[i-1];
}
for(i=1;i<VN.length+1;i++)
for(j=1;j<VT.length+1;j++)
F[i][j]='0';
}
void start()
{
for(int i=0;i<right.length;i++)
{
stop:
{ for(int j=0;j<right[i].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 stop;
}
}
}
}
while(s.size()!=0)
{
String C;
String D;
C=(String)s.pop();
D=(String)s.pop();
for(int i=0;i<right.length;i++)
{
if(C.charAt(0)==right[i].charAt(0))
Insert(left[i],D);
}
}
}
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);
}
}
void print()
{
for(int i=0;i<VN.length+1;i++)
{System.out.println();
for(int j=0;j<VT.length+1;j++)
{System.out.print(" ");
System.out.print(F[i][j]);
}
}
}
}
class Lastvn extends Firstvt
{
char G[][];
void jch()/*记录first集*/
{
G=new char[VN.length+1][VT.length+1];
for(int i=0;i<VN.length+1;i++)
for(int j=0;j<VT.length+1;j++)
G[i][j]=F[i][j];
}
void Init()
{
super.Init();
}
void start()
{
for(int i=0;i<right.length;i++)
{
stop:
{ for(int j=right[i].length()-1;j>=0;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 stop;
}
}
}
}
while(s.size()!=0)
{
String C;
String D;
C=(String)s.pop();
D=(String)s.pop();
for(int i=0;i<left.length;i++)
{
{for(int m=0;m<VN.length;m++)
if(right[i].charAt(right[i].length()-1)==C.charAt(0))
Insert(left[i],D);
}
}
}
}
void Insert(String P,String a)
{
super.Insert(P,a);
}
void print()
{

super.print();
}
char R[][];/*优先表数组*/
void Init1()
{
R=new char[VT.length+1][VT.length+1];
int i,j;
R[0][0]=' ';
for(j=1;j<VT.length+1;j++)
{R[0][j]=VT[j-1];
}
for(i=1;i<VT.length+1;i++)
{
R[i][0]=VT[i-1];
}
for(i=1;i<VT.length+1;i++)
for(j=1;j<VT.length+1;j++)
R[i][j]='0';

for(int t=0;t<VT.length+1;t++)
{
System.out.println();

for(int e=0;e<VT.length+1;e++)
{System.out.print(" ");
System.out.print(R[t][e]);
}
}
}
void Pand()/*判断优先级*/
{
for(int i=0;i<right.length;i++)
{for(int j=0;j<right[i].length();j++)
for(int k=0;k<VT.length;k++)
if(right[i].charAt(j)==VT[k])
{
for(int k1=0;k1<VT.length;k1++)
if(right[i].charAt(j+1)==VT[k1])
R[k+1][k1+1]='=';
else
{
for(int m=0;m<VN.length;m++)
if(right[i].charAt(j+1)==VN[m])
{
for(int n=0;n<VT.length;n++)
{
if(G[m+1][n+1]==1)
R[k+1][n+1]='<';
}
/*188行 */ }
for(int d=0;d<right[i].length()-1;d++)
for(int k2=0;k2<VT.length;k2++)
if(right[i].charAt(j+2)==VT[k2])
R[k+1][k2+1]='=';
}
}
else
{
for(int d=0;d<right[i].length();d++)
for(int k1=0;k1<VT.length;k1++)
{
if(right[i].charAt(j+1)==VT[k1])
for(int m=0;m<VN.length;m++)
{
if(right[i].charAt(j)==VN[i])
for(int n=0;n<VT.length;n++)
{
if(F[m+1][n+1]==1)
R[i+1][j+1]='<';
}
}
}
}
}
}
void print2()/*输出优先表*/
{
for(int i=0;i<VT.length+1;i++)
{
System.out.println();

for(int j=0;j<VT.length+1;j++)
{System.out.print(" ");
System.out.print(R[i][j]);
}
}
}
}

public class Sfyx
{
public static void main(String[] args) {
Firstvt app=new Firstvt();
app.Init();
app.start();
app.print();
Lastvn app1=new Lastvn();
app1.Init();
app1.start();
app1.print();
SFFORM app2=new SFFORM();
app2.Init();
app2.Pand();
app2.print();
}
}




...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoveRose 2003-10-22
  • 打赏
  • 举报
回复
提供 SFFORM 这个类吧!
不然编译不通过
vampire1129 2003-10-22
  • 打赏
  • 举报
回复
怀疑是数组下标越界
把xx.length-1改为xx.length试试

62,614

社区成员

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

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