2014-11-06 31 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