2014-04-14 2 views
6

저는 초보자입니다. 간단한 프로그램을 만들고 있습니다. 입력 한 내용이 "데이터베이스"의 항목 중 하나와 일치하면, 일부 텍스트를 인쇄합니다.많은 if 문에 대한 빠른 대안

int 1; 
int 2; 
int 3; 

if([USER INPUT].equals("1")) { 
    System.out.println("TEST"); 
} 

400 회 : 오히려이 일을보다이를 확인하는 간단한 방법이있다.

+0

:

enum NumberText { HELLO(1, "Hello to You"), GOODBYE(2, "Goodbye"); private static final HashMap<Integer,NumberText> map = new HashMap<Integer,NumberText>(); static{ for (ConnectionGenerator c : ConnectionGenerator.values()) { map.put(c.code, c); } } Integer code; String text; NumberText(Integer pCode, String pText) { this.code = pCode; this.text = pText; } ConnectionGenerator getNumberTextFor(Integer code) { return map.get(code); } getText() { return this.text; } } 

그럼 당신은 이런 식으로 텍스트를 얻을 수 기타). – yshavit

+0

400 개 명령을 하위 그룹으로 나누기 위해 계층 구조를 추가 할 수 있습니까? –

+0

답변 중 하나가 귀하의 질문에 대한 답변이면 답변으로 표시하십시오. –

답변

8

switch 문이나 HashMap을 사용하십시오.

switch 문 : 읽기 가능하지만 if-else 체인과 유사하게 (동일하지 않은 경우) 컴파일됩니다.

switch([USER_INPUT]) { 
    case 1: 
     System.out.println("TEST"); 
     break; 
    case 2: 
     System.out.println("HELLO"); 
     break; 
    // And so on. 
} 

Hash Map : 훨씬 더 읽기 쉽고 간단합니다. 이것은 선호됩니다.

// Initialization. 
Map<Integer,String> map = new HashMap<Integer,String>(); 
map.put(1,"TEST"); 
map.put(2,"HELLO"); 

// Printing. 
String s = map.get(USER_INPUT); 
if (s == null) 
    System.out.println("Key doesn't exist."); 
System.out.println(s); 
+3

이것이 IF보다 나은 이유는 무엇입니까? – NimChimpsky

+0

더 읽기 쉽습니다. –

+0

HashMaps에 대해 자세히 설명해야합니다. –

0

switch 문을 사용하십시오.

switch(i){ 
    case 1: 
    System.out.println("Hi"); 
    break; 
    case 2: 
    System.out.println("Ok"); 
    break; 
    // ... 
} 
1

키를 정수로, 값을 텍스트로 사용하는 HashMap을 사용하십시오.

System.out.println(myMap.get(USER_INPUT)); 

myMap.put(1, "TEST"); 등을 수행 한 경우 코드가 많이 유지됩니다.

스위치의 기본 바이트 코드는 매우 유사하며 개인적으로 전환 전환의 이점을 볼 수 없습니다 (빠지기를 원하지 않는 한 break 문을 포함하지 않음).

1

재미있는 대안은 열거 형을 사용하는 것입니다. 이것은 클래스의 모든 값을 정의하려는 경우 작동합니다. 텍스트 값을 가져 오는 데 사용되는 코드를 단순화합니다. 그리고 switch 문이주는 것 이상의 재미있는 옵션을 제공합니다.

enum NumberText { 
    HELLO(1), 
    WORLD(2); 

    private static final HashMap<Integer,NumberText> map = new HashMap<Integer,NumberText>(); 
    static{ 
     for (ConnectionGenerator c : ConnectionGenerator.values()) { 
      map.put(c.code, c); 
     } 
    } 

    Integer code; 

    NumberText(Integer pCode) { 
     this.code = pCode; 
    } 

    Static ConnectionGenerator getTextFor(Integer code) { 
     return map.get(code); 
    } 
} 

그럼 간단하게이 작업을 수행, 텍스트를 얻을 :

NumberText nt = NumberText.getTextFor(USER_INPUT); 
System.out.println(nt); 

당신은 애호가 얻을 열거에 추가 생성자 변수를 넣고 텍스트의 특정 문자열을 가질 수 있습니다. , 당신의 int/문자열/어떤 행동 (`Runnable`,`Function`에서 스위치, 또는`지도`를 사용할 수 있습니다

NumberText.getNumberTextFor(USER_INPUT).getText(); 
+0

"재미있는 대안"그건 거의이게 뭔 소리 야? –