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)
请前辈帮忙看看,在线等,谢谢 展开
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)
请前辈帮忙看看,在线等,谢谢 展开
8个回答
展开全部
将
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方法。所以不会包空指针。
展开全部
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你name下标是30 这三个都不匹配的话会比对第四个,第四个是空,空无法比对 自然给你报错了
java的String数组存的是String字符串的地址,所以你初始化的时候是建了一堆null而不是一堆值为空的String,null没有equals方法,所以调用肯定出错
java的String数组存的是String字符串的地址,所以你初始化的时候是建了一堆null而不是一堆值为空的String,null没有equals方法,所以调用肯定出错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
等等。。。
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怎么可以调用方法呢,出现空指针了;
望采纳! 谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入之外的名字时search函数中if(names[i].equals(name)) 的names[i]还是null,出现空指针异常了。
换下位置改为if(name.equals(names[i]))
换下位置改为if(name.equals(names[i]))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(names[i].equals(name))改成if(name.equals(names[i]))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |