2012-01-23 3 views
0

사용자 입력에 따라 해시 맵에서 값과 키를 검색하려고합니다.오류 입력 처리

여기 키 보드에서 값을 입력하도록 사용자에게 요청했습니다. 그리고 나중에 사용자 입력에 따라 해시 맵에서 Value 또는 Key를 검색합니다.

현재로서는 문제가 없습니다. 하지만 오류 조건을 처리하고 싶습니다.

는 예컨대 :

  1. 어떤 경우 사용자는 1에서 System.out.println() 문에 M/N 또는 Q 이외의를 제공합니다.
  2. 사용자가 주 번호를 잘못 입력하면 어떻게 되나요?

이와 같이 사용자에게 System.out.println() 문의 입력을 요청한 후 가능한 모든 오류 조건을 처리하려고합니다.

/* *이 템플릿을 변경하려면 도구 | 템플릿 *을 선택하고 편집기에서 템플릿을 엽니 다. */ 패키지 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

관심이 있으신 분께 : (a == null? "M"== null : a.equals ("M")) || a.equals ("m")'? – NPE

+0

이 조건은 대문자 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이 아닌 값을 null과 비교하면 원하는 것을 얻을 수 없습니다. 당신은 당신의 검사를 단순화 할 수 있습니다 :

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

현재 코드는 여전히 때문에 실행되는 a.equals("m") 비트의, null의 입력에 발프 것입니다. 그러나 나는 Scanner이 빈 문자열을 반환 할 것이고 사용자가 Enter를 누르는 경우가 아니라고 생각합니다.