2014-02-23 89 views
0

我想知道是否有辦法獲得索引,讓我給你看一個例子。索引幫助Java

String[] names = {"Daniel", "Lewis", "Sarah", "John"}; 

    String cmd = input.nextLine(); 

    String CMD[] = cmd.split(" "); 


    if (CMD[0].equalsIgnoreCase("my name is") && CMD[1].equalsIgnoreCase(accountIndex[0])){ 

    System.out.println("My name is Daniel!"); 

    } else if (CMD[0].equalsIgnoreCase("my name is") && CMD[1].equalsIgnoreCase(accountIndex[1])) { 

    System.out.println("My name is Lewis!"); 
    } else if (CMD[0].equalsIgnoreCase("my name is") && CMD[1].equalsIgnoreCase(accountIndex[2])) { 

    System.out.println("My name is Sarah!"); 
    } else if (CMD[0].equalsIgnoreCase("my name is") && CMD[1].equalsIgnoreCase(accountIndex[3])) { 

    System.out.println("My name is John!"); 
    } 

是否有比嵌套if語句更簡單的方法來做到這一點?

請注意,我只想使用表內名稱,所以我不能只是一個名爲myName的字符串等於CMD [1]。

我想這有點像用戶名的數據庫中,如果您的用戶名不存在,則無法登錄。

我喜歡這樣吃,但沒有if語句,以及嵌套負荷名稱數組將是這個實例中的數據庫。

+0

accountIndex將名稱 – Kick

+0

代替你能給出你要完成的更多信息? – RyanDawkins

+0

當然,如果你想知道我實際上想做什麼,它會像電子郵件系統。所以你應該這樣做!發送電子郵件somenamefromtable texthere,如果名稱是有效的,它會說「電子郵件發送到[從數組名稱]然後文本可以是」這是一個測試「 – user3128007

回答

1

你可以做

List<String> names = Arrays.asList("Daniel", "Lewis", "Sarah", "John"); 
if (names.contains(CMD[3]) { 
    System.out.println("My name is " + CMD[0]); 
} else { 
    // not found... 
} 
+1

這段代碼是錯誤的...數組應該從CMD [3]開始,因爲會有元素:a [0] =「my」,a [1] =「name」,[2] =「is」 – RyanDawkins

+0

OP發佈的代碼無效 - 校正:) – Reimeus

1

你可以嘗試for循環:

for (int i = 0; i < names.length(); i++) { 
    if (CMD[3].equalsIgnoreCase(accountIndex[i])) { 
     System.out.println("My name is " + names[i] + "!"); 
     break; 
    } 
} 
+0

-1不工作,因爲CMD是由分割函數創建的數組,它用空格分隔所有的字符串,因此沒有元素將會有空格 – RyanDawkins

0

當用戶輸入一個名字,你可以查找的TreeSet的測試,如果給定的名稱是有效的名稱可以存儲在TreesSet有效的用戶名,然後。

TreeSet<String> validNames = new TreeSet<String>(); 
validNames.add("John"); 
validNames.add("Mary"); 
..... 
..... 

// For searching 
if(validNames.contains(CMD[0])) 
{ 
// name exists 
} 
else{ 
    // invalid name 
} 

注意:您可以將名稱保存在任何可搜索集合(包含HashMap也是這種情況下的不錯選擇這只是一個指針,你需要深入挖掘,以發現其數據結構適合您的需要。更多信息,您可以參考以下鏈接:

TreeSet

HashMap

1

運行cmd.split()將拆分數組給你一個數組:{"my", "name", "is", "some_name"}。這意味着你想要檢查的名字將在數組中的第四個元素給出,因此索引[3]

String[] names = {"Daniel", "Lewis", "Sarah", "John"}; 

String cmd = input.nextLine(); 
String CMD[] = cmd.split(" "); 

// Initial check to see if my name is exists. 
if(cmd.subtstring(0, 10).equalsIgnoreCase("my name is") && cmd.length > 3) 
{ 
    // This loop is better than checking each individual case because it allows you to dynamically add elements to your names array 
    for(int i = 0; i < names.length; i++) 
    { 
     // Must start at the fourth element since my, name, and is will be the 0-2 elements. 
     if(CMD[3].equalsIgnoreCase(names[i])) 
     { 
      System.out.println("My name is "+names[i]+"!"); 
      break; 
     } 
    } 
} 
0

您可以轉換數組列表,然後用contains方法搜索的名稱列表:

if(Arrays.asList(names).contains(CMD[3])) 
    System.out.println("My name is " + CMD[3] + "!"); 
+0

這是行不通的。數組將有s步伐。 – RyanDawkins

+0

@RyanDawkins對不起,我的壞。我只是直接專注於OP的問題,而沒有看到他的「我的名字是」比較的錯誤。謝謝。 –

1

要拆分的空間,所以

CMD[0].equalsIgnoreCase("my name is") 

永遠不會評估爲真。

爲什麼要測試"my name is "呢?只需抓住第四個詞,如果這是你使用的格式:CMD[3]

要避免這些if-else-if-elses,請將名稱放入密鑰爲名稱的映射中,並且該值始終爲null

然後對按鍵測試名稱:

if(mapOfNames.containsKey(CMD[3]))