写一个电话本程序,只存取姓名和号码
写好后,编译可以通过,但当执行这个功能函数时,却遇到一点麻烦
这是整个程序清单:
调用这个输出清单时,可以完成功能,但是后面还出现了这几行提示错误
import java.io.*;
import java.lang.String;
class IndexIterm
{
String name;
String TelNum;
void print()
{
System.out.println(name+" "+TelNum);
}
}
class TelNumList
{
IndexIterm[] tel=new IndexIterm[50];
void add()throws IOException
{
for(int i=0;i<50;i++)
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入电话号码信息");
System.out.print("姓名:");
String Jname = br.readLine();
tel[i]=new IndexIterm();
tel[i].name = Jname;
System.out.print("号码:");
String JTelNum = br.readLine();
tel[i].TelNum = JTelNum;
System.out.print("继续输入吗?(y/n):");
String c = br.readLine();
if(c.equals("y"))
continue;
else if(c.equals("n"))
{
System.out.println("输入成功!请继续使用其他功能!");
return;
}
else
{
System.out.println("必须输入'y'或者'n',请重新输入:");
}
}
}
void IndexOf()throws IOException
{
System.out.print("请输入要查询的姓名:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String name = br.readLine();
for(int i=0;i<50;i++)
{
if(name.equals(tel[i].name))
{
int r=i+1;
System.out.println("查询结果:");
System.out.println("这是第"+ r +"项信息:"+tel[i].name+" "+tel[i].TelNum);
}
}
}
void IndexOfs()throws IOException
{
System.out.print("请输入要查询的号码:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String Num = br.readLine();
for(int i=0;i<50;i++)
{
if(Num.equals(tel[i].TelNum))
{
int r=i+1;
System.out.println("查询结果:");
System.out.println("这是第"+ r +"项信息:"+tel[i].name+" "+tel[i].TelNum);
}
}
}
void printList()//throws IOException
{
System.out.println("以下是所有号码信息的清单:");
if(tel[0].name.equals(""))
System.out.println("数据库里暂时没有信息,请按'8'输入信息!");
else
for(int i=0;i<50;i++)
{
if(!tel[i].name.equals(""))
{
tel[i].print();
}
else
return;
}
}
void remove()throws IOException
{
System.out.print("请输入要删除的项:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i = Integer.parseInt(br.readLine());
System.out.println("正在处理,请稍后...");
for(int j=i-1;j<50-1;j++)
{
tel[j]=tel[j+1];
}
System.out.println("删除成功!");
}
void SortOfName()throws IOException
{
for(int i=0;i<50-1;i++)
{
int q = i;
for(int j=i+1;j<50;j++)
{
if(!tel[j].name.equals(""))
{
if(tel[q].name.compareTo(tel[j].name)<0)
{
q=j;
}
}
else
{
break;
}
}
if(q!=i)
{
String Lname;
Lname=tel[q].name;
tel[q].name=tel[i].name;
tel[i].name=Lname;
}
}
System.out.println("已排序完毕!");
}
void SortOfNum()throws IOException
{
for(int i=0;i<50-1;i++)
{
int q = i;
for(int j=i+1;j<50;j++)
{
if(!tel[j].TelNum.equals(""))
{
if(tel[q].TelNum.compareTo(tel[j].TelNum)<0)
{
q=j;
}
}
else
{
break;
}
}
if(q!=i)
{
String LNum;
LNum=tel[q].TelNum;
tel[q].TelNum=tel[i].TelNum;
tel[i].TelNum=LNum;
}
}
System.out.println("已排序完毕!");
}
void pringf()throws IOException
{
System.out.print("请输入要查询的序号:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i =Integer.parseInt(br.readLine());
if(!tel[0].name.equals(""))
tel[i-1].print();
else
return;
}
void program()
{
System.out.println(" "+"******************************");
System.out.println(" "+" "+"本程序由李跃制作");
System.out.println(" "+" "+"Emal:daxia841@163.com");
System.out.println(" "+" "+"欢迎交流");
System.out.println(" "+"******************************");
}
int gotos()throws IOException
{
System.out.print("请选择:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
return a;
};
}
public class TelBook
{
public static void main(String[] args)throws IOException
{
TelNumList Q = new TelNumList();
System.out.println("*******************************");
System.out.println(" "+"按1:按姓名查找");
System.out.println(" "+"按2:按号码查找");
System.out.println(" "+"按3:删除号码项");
System.out.println(" "+"按4:查找指定位置的号码");
System.out.println(" "+"按5:按姓名排序");
System.out.println(" "+"按6:按号码排序");
System.out.println(" "+"按7:输出所有号码信息");
System.out.println(" "+"按8:添加新号码信息");
System.out.println(" "+"按9:显示本程序信息");
System.out.println(" "+"按0:退出本程序");
System.out.println("*******************************");
System.out.println();
int b=Q.gotos();
while(true)
{
switch(b)
{
case 1:
Q.IndexOf();
b=Q.gotos();
break;
case 2:
Q.IndexOfs();
b=Q.gotos();
break;
case 3:
Q.remove();
b=Q.gotos();
break;
case 4:
Q.pringf();
b=Q.gotos();
break;
case 5:
Q.SortOfName();
b=Q.gotos();
break;
case 6:
Q.SortOfNum();
b=Q.gotos();
break;
case 7:
Q.printList();
b=Q.gotos();
break;
case 8:
Q.add();
b=Q.gotos();
break;
case 9:
Q.program();
b=Q.gotos();
break;
case 0:
System.out.println("谢谢使用");
return;
}
}
}
}
比如说使用排序功能调用SortOfName();时,会出现这个提示
Exception in thread"main" java.lang.NullPointerException
at TelNumList.printList<TelBook.java:105>
at TelBook.main<Tel.Book.java:287>
在打印清单时,调用pringf();时也会出现同样的提示
请问这是什么问题
帮我下
谢谢~`
[此贴子已经被作者于2006-10-19 19:33:07编辑过]
----------------解决方案--------------------------------------------------------
你的是空指针异常,空指针异常是所有异常是最常见的,也是最容易处理的,你只要把你使用的对象都确保初始化了就可以了.
不过新在太晚了,俺要睡觉了!明天改吧!
----------------解决方案--------------------------------------------------------
谢谢你
但是需要怎么改呢?
请说清楚一下.好吗?
----------------解决方案--------------------------------------------------------
你的那个IndexIterm[] tel=new IndexIterm[50];
这个数组长度是50,你确保它里面的每一个数据都初始化了吗?
如果没有,那么取到它的时候就会抛出空指针异常
void printList()//throws IOException
{
System.out.println("以下是所有号码信息的清单:");
if(tel[0].name.equals(""))
System.out.println("数据库里暂时没有信息,请按'8'输入信息!");
else
for(int i=0;i<50;i++)
{
if(!tel[i].name.equals(""))
{
tel[i].print();
}
else
return;
}
}
它要打出50个所有的信息,并且都用到了这50个对象的引用(红色部份).异常从此抛出
建议:
初学者应该不要先写太难的程序,应该一步一步走,还有,要自己勤于思考
像本题,它抛出异常的时候已经说了是哪一个方法的哪一行出了异常,一找不就找出来了么?
xception in thread"main" java.lang.NullPointerException
at TelNumList.printList<TelBook.java:105>
at TelBook.main<Tel.Book.java:287>
它不是说在TelNumList.printList方法中的第105行吗?
是不是很清楚
----------------解决方案--------------------------------------------------------
谢谢版主指教
我把改成了这样
for(int i=0;i<50;i++)
{
tel[i]=new IndexIterm();
if(!tel[i].name.equals(""))
{
tel[i].print();
}
else
return;
}
}
为什么还是不行呢?
----------------解决方案--------------------------------------------------------
再线等待
----------------解决方案--------------------------------------------------------
你是在每个函数里都放了new IndexIterm();吗??
现在还出现空指针异常么?
----------------解决方案--------------------------------------------------------
在没个函数放个也不行啊
我把添加号码的函数改了下
void add()throws IOException
{
for(int i=0;i<50;i++)
{
tel[i]=new IndexIterm();
}
for(int i=0;i<50;i++)
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入电话号码信息");
System.out.print("姓名:");
String Jname = br.readLine();
System.out.print("号码:");
String JTelNum = br.readLine();
tel[i].IndexIterms(Jname,JTelNum);
System.out.print("继续输入吗?(y/n):");
String c = br.readLine();
if(c.equals("y"))
continue;
else if(c.equals("n"))
{
System.out.println("输入成功!请继续使用其他功能!");
break;
}
else
{
System.out.println("必须输入'y'或者'n',请重新输入:");
}
}
}
为什么一直不行?
版主..帮帮忙啊~
----------------解决方案--------------------------------------------------------
比如这个方法
void IndexOf()throws IOException
{
System.out.print("请输入要查询的姓名:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String name = br.readLine();
for(int i=0;i<50;i++)
{
if(name.equals(tel[i].name)){
/*这句你把输入的name和数组里的50个name比较,如果数组里面没存储任何的值,则你和50个null比较,当然会出空指针异常了*/
int r=i+1;
System.out.println("查询结果:");
System.out.println("这是第"+ r +"项信息:"+tel[i].name+" "+tel[i].TelNum);
}
}
}
好好安排你的程序的逻辑来解决这些情况
建议你学学java处理数据结构的类,比用数组好的多
----------------解决方案--------------------------------------------------------
版主.谢谢了
经过你的提示
我修改了下..
int m = 0;
static IndexIterm[] tel=new IndexIterm[50];
void add()throws IOException
{
for(int i=0;i<50;i++)
{
tel[i]=new IndexIterm();
}
while(m<50)
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入电话号码信息");
System.out.print("姓名:");
String Jname = br.readLine();
System.out.print("号码:");
String JTelNum = br.readLine();
tel[m].IndexIterms(Jname,JTelNum);
m++;
System.out.print("继续输入吗?(y/n):");
String c = br.readLine();
if(c.equals("y"))
continue;
else if(c.equals("n"))
{
System.out.println("输入成功!请继续使用其他功能!");
break;
}
else
{
System.out.println("必须输入'y'或者'n',请重新输入:");
}
}
}
用了一个m控制下标..成功了~~
----------------解决方案--------------------------------------------------------