2012-11-22 20 views
0

아래 두 가지 기능이있는 경우. 선택할 기능을 어떻게 선택할 수 있습니까?Java의 입력에 따라 함수를 선택

나는 스캐너의 내용을 결정하기위한 몇 가지 형식의 명령문이 있으므로 상상할 수있는 기능이 하나뿐입니다. 아니면 함수에 전달되는 것입니다.

public static int questionAsk(String question) 
{ 
    Scanner scan = new Scanner (System.in); 
    System.out.print (question+"\n"); 
    System.out.print ("Answer: "); 
    return scan.nextInt(); 
} 
    public static String questionAsk(String question) 
{ 
    Scanner scan = new Scanner (System.in); 
    System.out.print (question+"\n"); 
    System.out.print ("Answer: "); 
    return scan.nextLine(); 
} 
+4

같은 클래스에이 두 가지 방법이있는 경우 컴파일 오류입니다. 메서드 반환 형식은 메서드 서명에 포함되지 않으므로 유효한 오버로드가 아닙니다. –

+0

System.in을 검사 할 때 예상되는 문자열 또는 Int 유형을 알고 있습니까? 아니면 답을 분석하고 가장 적합한 Java 유형을 선택해야합니까? – AlexWien

+1

questionAskInt() 및 questionAskString()으로 이름을 바꿀 수 있습니다. – AlexWien

답변

1

호출하는 메소드 중 컴파일러가 알 수있는 방법이 없습니다.

public static int questionAsk(IntQuestion question) 
{ 
    Scanner scan = new Scanner (System.in); 
    System.out.print (question.toString() +"\n"); 
    System.out.print ("Answer: "); 
    return scan.nextInt(); 
} 
    public static String questionAsk(StringQuestion question) 
{ 
    Scanner scan = new Scanner (System.in); 
    System.out.print (question.toString() +"\n"); 
    System.out.print ("Answer: "); 
    return scan.nextLine(); 
} 

를 그리고 두 개의 새로운 클래스 추가 : :이처럼 뭔가 다른 문자열 유형을 변경하여 안전하게 입력 할 수있는 당신이 StringQuestionIntQuestion를 구성 할 때

public class IntQuestion extends String{ 
     public IntQuestion(String question){ 
      super(question); 
     } 
    } 

    public class StringQuestion extends String{ 
     public StringQuestion(String question){ 
      super(question); 
     } 
    } 

를 간단히 구성 할 수있다 그것들은 생성자를 호출 한 경우 String을 생성하는 것과 같은 방법입니다.

IntQuestion intQuestion = new IntQuestion("Some String Here"); 

이것은 구문적인 설탕에 불과합니다. 컴파일러는 좋은 재생 및 유형에 따라 올바른 방법을 선택합니다.

이 정보가 도움이되기를 바랍니다.

0

먼저 else, switch case를 사용하여 필요한 기능을 스캔하고 구문 분석 한 다음 호출해야합니다.

지금하고있는 일은 코드를 재사용하지 않고 두 가지 기능에서 동일한 코드를 사용하는 것입니다. 대신 하나의 스캔을 사용하십시오.

+0

단일 메서드는 두 가지 반환 유형을 사용할 수 없습니다. 그는 int 나 String을 반환 할 수 있어야합니다. –

+0

우리는 그것을 객체로 반환하고 반환 된 객체의 인스턴스를 검사하여 문자열 또는 정수인지를 확인할 수 있습니다. –

+0

그래도 질문을 입력하면 추악 해지고 반환 된 객체의 유형을 묻는 모든 메소드 호출이 필요합니다. –

관련 문제