java初学者的问题,请前辈指教,谢谢

publicclassCustomerBiz{Stringnames[]=newString[30];publicvoidsddName(Stringname){for(... public class CustomerBiz {
String names[]=new String[30];
public void sddName(String name){
for(int i=0;i<names.length;i++){
if(names[i]==null){
names[i]=name;
break;
}
}
}
public void show(){
System.out.println("*********************");
System.out.println("客户姓名列表");
System.out.println("*********************");
for (int i=0;i<names.length;i++){
if(names[i]!=null){
System.out.print(names[i]+" ");
}
}
}

public boolean search(String name){
boolean find=false;
for(int i=0;i<names.length;i++){
if(names[i].equals(name)){
find=true;
break;
}
}
return find;
}
}

第二个测试类
import java.util.*;
public class TestCust {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
CustomerBiz cust=new CustomerBiz();
boolean con=true;
while(con){
for(int i=0;i<cust.names.length;i++){
System.out.print("请输入客户的姓名:");
String newName=input.next();
cust.sddName(newName);
System.out.print("还继续吗?");
String answer=input.next();
if("n".equals(answer)){
con=false;
break;
}
}
}
cust.show();
System.out.print("请输入要查找的客户姓名:");
String findName=input.next();
if(cust.search(findName)){
System.out.println("找到了");
}else {
System.out.println("没找到");
}
}
}
假如我输入 客户姓名为:a,b,c
然后查找 输入a或b或c都没问题!但是我只要输入 这三个以外的字母,却不会显示“没找到”显示的是
Exception in thread "main" java.lang.NullPointerException
at CustomerBiz.search(CustomerBiz.java:26)
at TestCust.main(TestCust.java:23)
请前辈帮忙看看,在线等,谢谢
展开
 我来答
zhou2003737
2013-08-29 · TA获得超过1427个赞
知道小有建树答主
回答量:1082
采纳率:77%
帮助的人:390万
展开全部

public boolean search(String name){
boolean find=false;
for(int i=0;i<names.length;i++){
if(names[i].equals(name)){
find=true;
break;
}
}
return find;
}

改成

public boolean search(String name){
        boolean find=false;
        for(int i=0;i<names.length;i++){
              if(name.equals(names[i])){
                    find=true;
                    break;
                }
            }
        return find;
    }

就可以解决你的问题了。

原因是你的 names[]的数组中只有3个值a,b,c,当你用另外一个值去测试的时候,循环中判断不相等 会移动到下个数据继续判断。但是当到下标为3时候即 names[3]时此时没有数据,为null.那么 null是没有equals方法的!

追问
if(names[i].equals(name))改成if(name.equals(names[i]))为什么改成这样就可以了呀
追答
因为name是你传入的非abc的数据,他是真真实实存在的。他有 equals方法。所以不会包空指针。
百度网友5a63f87
2013-08-29 · TA获得超过443个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:114万
展开全部
public boolean search(String name){
boolean find=false;
for(int i=0;i<names.length;i++){
if(names[i].equals(name)){ // 判断下names[i] 为空 names[i] != null &&names[i].equals(name) find=true;
break;
}
}
return find;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
常磐柯南
2013-08-29 · TA获得超过1228个赞
知道小有建树答主
回答量:400
采纳率:0%
帮助的人:278万
展开全部
因为你name下标是30 这三个都不匹配的话会比对第四个,第四个是空,空无法比对 自然给你报错了
java的String数组存的是String字符串的地址,所以你初始化的时候是建了一堆null而不是一堆值为空的String,null没有equals方法,所以调用肯定出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰封狗
2013-08-29
知道答主
回答量:83
采纳率:0%
帮助的人:28.3万
展开全部

等等。。。

public boolean search(String name) {
boolean find = false;
for (int i = 0; i < names.length; i++) {
if (names[i] != null) {
if (names[i].equals(name)) {
find = true;
break;
}
}
}
return find;
}

加一句判断,出现异常的原因是你的数组的长度为30,但是你只放了a,b,c三个当 i 增长到names数组中没有被赋值的地方时if (names[i].equals(name))中names[i]是个null,null怎么可以调用方法呢,出现空指针了;


望采纳!  谢谢

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9f16d3635
2013-08-29 · 超过14用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:36.8万
展开全部
输入之外的名字时search函数中if(names[i].equals(name)) 的names[i]还是null,出现空指针异常了。
换下位置改为if(name.equals(names[i]))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
墨墨磨磨叽叽9g
2013-08-29 · TA获得超过371个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:167万
展开全部
if(names[i].equals(name))改成if(name.equals(names[i]))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式