2011-12-29 5 views
1

다음과 같이 Hashtable을 두 개 구현했습니다.콘솔에서 정수 및 문자열 읽기

HashMap<Integer,String> streetno=new HashMap<Integer,String>(); 
    streetno.put(1, "Sachin Tendulkar"); 
    streetno.put(2, "Dravid"); 
    streetno.put(3,"Sehwag"); 
    streetno.put(4,"Laxman"); 
    streetno.put(5,"Kohli"); 


HashMap<String,Integer> streetname=new HashMap<String,Integer>(); 
    streetname.put("Sachin Tendulkar",1); 
    streetname.put("Dravid",2); 
    streetname.put("Sehwag",3); 
    streetname.put("Laxman",4); 
    streetname.put("Kohli",5); 
    Iterator itr=streetno.keySet().iterator(); 

이제 입력을 요청합니다. 그는 정수를 입력하면 1 해시 테이블에서 특정 값을 검색하고 사용자가 문자열을 입력하면 2 번째 해시 테이블에서 특정 정수를 읽으려고합니다.

내 질문은 "사용자 입력을 어떻게 읽을 수 있습니까?"입니다. 사용자가 정수 또는 문자열을 입력하는지 여부를 알지 못하기 때문에 ?? 그리고 알고 싶었습니다. 키에 따라 Iterator를 사용하여 특정 값을 검색 할 수 있습니까?

답변

0

당신은 입력을 읽을 수 있습니다. 난 그냥 이런 식으로 주요 논리를 시도했다. 두 개의지도를 결합하면이 방법을 시도 할 수 있습니다.

  String input = "Laxman";    
      HashMap<String, String> street = new HashMap<String, String>(); 
      street.put("1", "Sachin Tendulkar"); 
      street.put("2", "Dravid"); 
      street.put("3", "Sehwag"); 
      street.put("4", "Laxman");   

      for (Map.Entry<String, String> entry : street.entrySet()) { 
       System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 
       if (input.equals(entry.getKey())) { 
        System.out.println(entry.getValue()); 
        break; 
       } else if (input.equals(entry.getValue())) { 
        System.out.println(entry.getKey()); 
        break; 
       }    
      }     
0

Integer.parseInt 입력이 정수인지 아닌지 알아 내야합니다.

불행히도 실제로는 "tryParse"나 그와 비슷한 것이 없으므로 예외를 잡아야합니다. 은 숫자가 아닌지 여부를 확인하기 위해 정규 표현식을 사용할 수 있지만 이는 가치가있는 것보다 더 혼란 스러울 수 있습니다.

지금까지 콘솔에서 읽기, 내가 사용하는 것처럼 :

Scanner console = new Scanner(System.in);

0

문자열로 입력을 읽기; 정수로 구문 분석 할 수있는 경우 streetno을 사용하고, 그렇지 않으면 streetname을 사용하십시오.

1

사용자로부터 어떻게 입력을 읽을 수 있습니까 ??

String line = scanner.nextLine(); 

같은

뭔가 내가 사용자가 정수 또는 문자열을 입력 여부를 알 수 없기 때문에?

시도가

try { 
    int num = Integer.parseInt(line); 
    // lookup by number 

} catch(NumberFormatException ignored) { 
    // lookup by string 

} 

내가 키에 따라 Iterator를 사용하여 특정 값을 검색 할 수있는 정수로 변환 할 ??

반복자는 iterating을위한 것이며, Map은 키를 찾는 것이다.

0

Scanner 클래스를 사용하여 사용자 입력을 검색 할 수 있습니다. 사용자가 int 또는 문자열을 입력했는지 확인하는 데 유용한 nextInt() or nextLine()과 같은 유용한 메소드가 몇 가지 있습니다.

사용자는 int 또는 string 사전에 입력하는 내용을 "말하게"만들 수도 있습니다. 그러나 이것은 사용자에게 친숙하지 않습니다.

HashMap에서 값을 얻으려면 키를 제공 할 때 get(key) 메서드를 사용하십시오.

1

먼저 표준 입력을 읽어야합니다. 단순화하기 위해 먼저 문자열로 처리하십시오.

Scanner scanner=new Scanner(System.in); 
    String userInput=scanner.nextLine(); 

그런 다음 문자열을 정수로 변환하십시오. 사용자가 번호를 입력 한 경우, 당신은 첫 번째지도 열쇠를 얻을 것이다, 그렇지 않으면, 당신이 두 번째의 문자열 열쇠 asume 수 있습니다

String sName; 
    Integer iNumber; 
    try { 
     iNumber=Integer.parseInt(userInput); 
     //user intruduced a number, so get the streename 
     sName=streetno.get(iNumber); 

    } catch (NumberFormatException e) { 
     //user introduced a not-numeric String, so get the streetnumber 
     sName=userInput; 
     iNumber=streetname.get(sName); 
    } 

당신은 키 집합을 반복 할 필요가 없습니다, Map.get() 메서드는 해당 값을 반환합니다.

마지막으로, (최종적으로 블록에 더 나은) 스캐너를 해제하는 것을 잊지 마세요 : 다른 답변에서 언급 한 바와 같이

scanner.close();