2014-01-24 7 views
1

이 문제는 메소드 오버로드에 관한 것이므로 기본적인 생각을 이해하고 있지만 "Overloading.java:14"라는 이상한 오류가 발생합니다. 마찬가지로 내 메서드의 두 매개 변수를 반환하는 방법을 모르겠다는 내 문제입니다. 그래서 아마도 toString()을 사용하여 두 개의 int 매개 변수로 메서드를 변환 한 다음 반환하는 것으로 생각했습니다. 뭔가 비참하게 잘못되었습니다. 출력은 한 다음 수 :Java가 두 개의 매개 변수로 메소드 오버로드

을 10

A 및 B (10),

결과 숯 20

그대로 내 문제와 97

은 " a와 b 10, 20 ", 그리고"char a "를하지 않았다. 이것은 이 아니라 숙제입니다.

OverMain 클래스 :

class OverMain { 
    public static void main(String args[]) { 
     Overload overload = new Overload(); 
     int result; 
     System.out.println("a " + overload.test(10)); //prints a 10 
      System.out.println("a and b " + overload.test(10, 20)); //the method I have trouble with 
     result = overload.test('a'); //prints Result 97 
     System.out.println("Result " + result); 
    } 
} 

과부하 등급 : 여기 내 코드는 지금까지 메인 클래스와 헬퍼 클래스가 포함되어 있습니다

//The class which is suppose to overload test methods 
class Overload { 

    public int test(int a) { 
    return a; 
    } 

    public String test(int a, int b) { 
    String string = ""; 
     string = test(a, b).toString(); 
     return string; 
    } 

} 
+0

존 소총을. –

+2

'test (int a, int b)'메쏘드에 무한 반복 루프가 있습니다 : 스택 오버플로가 발생할 때까지 스스로를 호출합니다. – Jesper

+2

왜 test (int, int b)에서'test (a, b)'를 호출합니까? 무한 재귀가 발생합니다. –

답변

6

정말 분명하지 않다 무엇을 다시 시도하고 있지만, 당신은 반환 매개 변수를 반환하지 않습니다, 그리고 과부하 정말 문제는 h 생각하지 않아요 오히려. 상황이 너무 복잡해지면 메서드를 변경하여 이름이 달라 지도록 할 수 있습니다. 그런 식으로 작동하게하면 나중에 이름을 변경하고 충돌을 해결할 수 있습니다. 귀하의 경우에는

난 그냥 필요가 있다고 생각 :

public String test(int a, int b) { 
    return a + ", " + b; 
} 

을 즉, 단지 문자열 연결 및 컴파일러는 문자열 연결을 사용하기 위해 적용됩니다 자동 intString에 변환을 사용합니다.

코드가 실제로 컴파일 된 경우 test(a, b)test(int a, int b)에서 호출하기 때문에 스택 오버플로가 발생합니다. 스택 공간이 부족할 때까지 스택은 영원히 호출됩니다.

+0

실제로 그것을 시도했지만 "public int .."에서 "public String .."줄을 변경하는 것을 잊지 않았습니다. 고마워! – deathshot

3

문제는 당신의 방법 test(int, int)

public String test(int a, int b) { 

    String string = ""; 
    string = test(a, b).toString(); // Danger 
    return string; 
} 
  • 에 당신은 끝없는 점화식을 가지고
  • 해결 방법 : 구조에 대한return a + ", " + b
관련 문제