2014-11-06 78 views
0

你好StackOverflow的人,在Java中访问部分数组?

我有我的当前代码的问题。当我试图查看数组是否包含某个搜索值时,我总是收到一个空指针异常。这是我现在的代码,这里是我必须完成它的标准。这是我在这里的第一篇文章,所以所有有益的批评都被接受。

准则: 创建一个程序,让用户在地址簿中输入信息,然后在地址簿中搜索名称。您必须将以下内容存储在地址簿中: 名称 电话号码 电子邮件地址 该程序将允许用户在地址簿中输入尽可能多的人员,最多可输入100个。用户将输入一个空的姓名表明他们已经输入了姓名。之后,用户将输入部分名称来搜索地址簿中的人员。为了充分的信任,这个搜索应该找到部分名字(见例子截图)。您的程序不需要区分大小写(即区分大小写)。您的程序应显示符合搜索条件的所有地址簿条目的所有信息。结果应该是图表格式(例如参见屏幕截图)。 如果用户输入空白名称来搜索该程序应结束。 您必须使用三个平行的一维数组。您必须使用全局变量到地址簿条目的最大数量设置为100。

package assignments; 

import global.Cod; 


public class Homework_08 
{ 
    public static final int MAXIMUM_ENTRIES = 100; 

    public static void main(String[] args) 
    { 
     String name[] = new String[MAXIMUM_ENTRIES]; 
     String phoneNumber[] = new String[MAXIMUM_ENTRIES]; 
     String email[] = new String[MAXIMUM_ENTRIES]; 

     String searchValue; 
     int index = 0; 
     boolean match = false; 

     if (!name.equals(MAXIMUM_ENTRIES)) 
     { 
      for (index = 0; index < MAXIMUM_ENTRIES; index++) { 
       System.out.print("Enter name (Or <ENTER> if done): "); 
       name[index] = Cod.next(); 

       if (!name[index].equals("")) { 
        System.out.print("Enter phone number: "); 
        phoneNumber[index] = Cod.next(); 

        System.out.print("Enter email address: "); 
        email[index] = Cod.next(); 
       } 
       else if (name[index].equals("")) 
       { 
        System.out.print("Enter search value: "); 
        searchValue = Cod.next(); 

        while (!match && index < MAXIMUM_ENTRIES) 
        { 
         if (name[index].contains(searchValue)) { 
          match = true; 
         } 
         else 
         { 
          index++; 
         } 
        } 

        System.out.println("Name     Phone   Email"); 
        System.out.println("----     -----   -----"); 

        if (match) 
        { 
         System.out.println(name[index] + phoneNumber[index] + email[index]); 
        } 
        else 
        { 
         System.out.println("           "); 
        } 
       } 
      } 
     } 
    } //main() 
} //class 

鳕鱼import语句是为我做扫描仪非常简单的方法。它们以相同的方式工作,其中next()只是要求下一个字符串,而其他所有可能性都是不言自明的。

谢谢。

回答

0

问题是,你的(!match && index < MAXIMUM_ENTRIES)循环在数组的最后一项开始搜索(即当前值为index)。

封闭for()循环更新index每当您收到姓名,电话,&电子邮件。那很好。但是当您搜索时,您需要在数组索引0处开始搜索并转至index(即数组中有多少有效元素的当前计数)。

当你得到一个空的name字符串并建立一个新的循环来搜索名称(并且只搜索最多index名称)时,试着突破数据输入循环。

此外,您不需要检查名称为空两次。此代码:

if (!name[index].equals("")) { 

测试,看看名字不为空,但在随后的else块再次测试:

else if (name[index].equals(""))

既然你已经知道它是一个非空从第一次测试来看,没有理由再做一次。只要说else {

这不是一个错误,只是一个优化和一个方法,你需要记住看看if/else块。

0

在这里,我可以看到两个问题1)你没有null检查名称[索引]。在初始化数组时,所有元素的初始值都将为空。 2)您正在使用相同的索引进行迭代,这可能会导致新增加的联系人将进入随机位置。更好地使用单独索引searchIndex进行搜索迭代。

int searchIndex = 0; 
while (!match && searchIndex< MAXIMUM_ENTRIES) 
       { 
        if (null!=name[searchIndex] && name[searchIndex].contains(searchValue)) { 
         match = true; 
        } 
        else 
        { 
         searchIndex++; 
        } 
       } 
0
import global.Cod; 
import java.util.*; 
import java.io.*; 
public class Homework_08 
{ 
    public static final int MAXIMUM_ENTRIES = 100; 

    public static void main(String[] args) 
    { 
     String names[] = new String[MAXIMUM_ENTRIES]; 
     String phoneNumbers[] = new String[MAXIMUM_ENTRIES]; 
     String emails[] = new String[MAXIMUM_ENTRIES]; 
     Scanner scan = new Scanner(System.in); 
     String searchValue,name,mail,pno; 
     int index = 0,i; 
     boolean match = false; 

      for (index = 0; index < MAXIMUM_ENTRIES; index++) { 
       System.out.print("Enter name (Or <ENTER> if done): "); 
       name= scan.nextLine(); 
       if(name=="")break; 
       else{ 
        System.out.print("Enter phone number: "); 
        pno = scan.nextLine(); 
        System.out.print("Enter email address: "); 
        mail= scan.nextLine(); 
        names[index]=name; 
        phoneNumbers[index]=pno; 
        emails[index]=mail; 

       } 
      } 
      System.out.print("Enter name to search (Or <ENTER> if done): "); 
      searchValue= scan.nextLine(); 
      while(searchValue!=""){ 
      for(i=0;i<index;i++){ 
       if(names[i].contains(searchValue)){ 
        System.out.println("Name "+names[i]+"Phone Number "+phoneNumbers[i]+"Email id "+emails[i]); 
       } 
      } 
      System.out.print("Enter name to search (Or <ENTER> if done): "); 
      searchValue= scan.nextLine(); 
      } 
    } //main() 
} //class