2012-01-23 63 views
0

這裏我試圖根據用戶輸入從哈希映射中檢索值和鍵。處理錯誤輸入

這裏我要求用戶從鍵盤輸入數值。後來取決於用戶輸入,我從哈希映射中檢索Value或Key。

截至目前它工作正常。但我想處理錯誤情況。

E.g:

  1. 如果什麼用戶提供比M/N或Q其他在第一的System.out.println()語句。
  2. 如果用戶無效主號碼等等。

像這樣我想在處理System.out.println()語句中的用戶輸入後處理所有可能的錯誤條件。

/* *要更改此模板,請選擇工具|模板 *並在編輯器中打開模板。 */ package cricketpur;

import java.lang.*; 
    import java.util.*; 
    import java.io.*; 
    public class Main { 


public static void main(String[] args) { 
    // TODO code application logic here 

    HashMap<String, String> streetno = new HashMap<String, String>(); 
    streetno.put("1", "Sachin Tendulkar"); 
    streetno.put("2", "Dravid"); 
    streetno.put("3", "Sehwag"); 
    streetno.put("4", "Laxman"); 
    streetno.put("5", "Kohli"); 
    Scanner s = new Scanner(System.in); 
    String a; 
    String inp; 

    for (;;) { 
     System.out.println("Enter M/N and Q to quit:"); 
     a = s.nextLine(); 

     if ((a == null ? "M" == null : a.equals("M")) || a.equals("m")) { 
      System.out.println("Enter the Main number:"); 
      inp = s.nextLine(); 
     } else if ((a == null ? "Q" == null : a.equals("Q")) || a.equals("q")) { 
      break; 
     } else { 
      System.out.println("Enter the Street name:"); 
      inp = s.nextLine(); 

     } 
     for (Map.Entry<String, String> entry : streetno.entrySet()) { 

      if (inp.equals(entry.getKey())) { 
       System.out.println(entry.getValue()); 
       break; 
      } else if (inp.equals(entry.getValue())) { 
       System.out.println(entry.getKey()); 
       break; 
      } 

     } 
    } 
} 
} 
+0

出於興趣,這是什麼應該做的:'(一== NULL 「M」 == NULL:a.equals( 「M」))|| a.equals( 「M」)'? – NPE

+0

這種情況只是檢查它是否是大寫的M或小的m ..就是這樣..如果滿足一個條件中的任何一個,它會進入if條件中。 –

回答

0

檢查,看看他們的投入是有效的,如果不是,那麼要求他們輸入它再次

System.out.println("Enter M/N and Q to quit:");  
while(true) 
{ 
    a = s.nextLine(); 
    if(/*a is valid*/) 
    { 
     break; 
    } 
    else 
    { 
     System.out.println("Insert invalid input message here. Enter M/N and Q to quit:");  
     a = s.nextLine(); 
    } 
} 
1

你有一個散列表。您不必比較密鑰。只需看看streetno.get(inp)是否爲空。如果它不爲null,則可以顯示該值,如果該值爲null,則可以顯示錯誤消息。

另外,"M"==null總是假的。 null是一個特殊值,意思是「沒有價值」。比較非空值到null不會得到你想要的。您可以簡化您的支票:

if("M".equals(a) || "m".equals(a)) { ... } 

您當前的代碼仍然BARF,因爲它運行a.equals("m")位上的空輸入。 (我這樣做,不過,相信Scanner將返回一個空字符串,而不是null,如果用戶只是點擊進入)