该程序用于计算句子中每个单词的频率。 这是源代码:
import java.io.*;
import java.util.Scanner;
class Dictionary
{
String key;
int val;
public Dictionary()
{
key="";
val=0;
}
void insert(String k)
{
key=k;
val=1;
System.out.println("\nInserted key with value: "+k);
}
void update()
{
val++;
}
String retkey()
{
return key;
}
int retval()
{
return val;
}
public void display()
{
System.out.println("Word = "+key);
System.out.println("Number = "+val);
}
}
class stack
{
Dictionary D[]=new Dictionary[50];
int n;
int top;
public stack(int N)
{
n=N;
top=-1;
// D=new Dictionary[n];
}
public void push(String p)
{
top++;
System.out.println("pushing "+p+"\n top=="+top);
D[top].insert(p);
System.out.println("\ntop="+top);
}
public void check(String p)
{
int i=0,flag=1;
String q="";
if(top==-1)
{
System.out.println("top=-1");
push(p);
flag=0;
}
else
{
for(i=0;i<=top;i++)
{
q=D[i].retkey();
if(q.equals(p))
{
D[i].update();
flag=0;
}
else
flag=1;
}
if(flag==1)
push(p);
}
}
public void print()
{
D[top].display();
}
}
public class Wrdcnt
{
public static void main(String[] args)throws Exception
{
// Dictionary D[]=new Dictionary() ;
String st="";
String p="";
System.out.println("Enter String: ");
Scanner in= new Scanner(System.in);
st=in.nextLine();
/* no of words*/
int n=count(st);
int j=0;
System.out.println("No of words: "+n);
stack stck =new stack(n);
for(int i=0;i<=st.length();i++)
{
if(i==st.length())
{
p = st.substring(j,i);
System.out.println(""+p);
stck.check(p);
System.out.println("Checking done for word: "+p);
j=0;
break;
}
if(st.charAt(i)==' ')
{
p = st.substring(j,i);
System.out.println(""+p);
stck.check(p);
j=i+1;
System.out.println("Checking done for word: "+p);
}
}
}
public static int count(String s)
{
int w=0;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)==' ')
{
w++;
}
}
return (w+1);
}
}
输出:
输入字符串:
玫瑰是红色的 不言而喻:3
玫瑰
页首= -1
推玫瑰 顶== 0
线程“main”中的异常java.lang.NullPointerException
at stack.push(Wrdcnt.java:51)
at stack.check(Wrdcnt.java:61)
在Wrdcnt.main(Wrdcnt.java:117)
答案 0 :(得分:0)
在这一行:
D[top].insert(p);
您访问的变量D[top]
恰好是null
。
当试图在insert(p)
上调用null
时,会出现NullPointerException。
这是因为您只初始化数组,但是没有初始化对象本身以填充数组:
Dictionary D[]=new Dictionary[50];
是为Dictionary[]
数组分配位置,但不是自己分配Dictionary
个对象。