2012-01-25 5 views
3

시간을 밀리 초 단위로 변환하여 mins : seconds 형식의 문자열로 변환하는 다음 함수를 작성했습니다. 전 C 프로그래머 였기 때문에 제대로 작동하려면 "ans"가 정적이어야한다고 가정했지만 String 앞에 정적을 두는 것은 허용되지 않는 것처럼 보입니다.자바에서 문자열을 반환하는 함수

내 질문은 -이 기능이 작동 할 것인가? 그렇지 않을 경우 어떤 변화로 작동 할 것인가?

public String time_to_string(long t) // time in milliseconds 
{ 
    String ans; 
    int mins,secs; 
    if (t < 0) 
    { 
     return "-"; 
    } 
    else 
    { 
     secs = (int)(t/1000); 
     mins = secs/60; 
     secs = secs - (mins * 60); 

     ans = ""+mins+":"+String.format("%02d", secs); 

     return ans; 
    } 
} 
+0

코드가 정상적으로 작동합니다. – Bhushan

+1

Can'y * you * 작동하는지 확인 하시겠습니까? 그냥 시도 해 봐. – skaffman

+0

메서드 이름을 변경하는 것이 좋습니다. 자바 메서드 이름은 거의 항상 낙타의 경우입니다. timeToString (...). 절대로 시행하지는 않지만, Java 세계에서 이름 지정 표준이 매우 표준화되었습니다. – Peter

답변

5

코드는 정상입니다. 이 방식으로 Strings을 반환해도 아무런 문제가 없습니다.

Java에서 String은 변경 불가능한 개체에 대한 참조입니다. 가비지 수집과 결합 된이 기능은 잠재적 인 복잡성을 상당 부분 해결합니다. String을 전달하면 문제가 해결되지 않거나 다른 사람이 수정할 수 있습니다.

당신이 문체 몇 가지 제안을 저를 생각하지 않으면, 내가 지금과 같은 코드를 수정하는 것 :

public String time_to_string(long t) // time in milliseconds 
{ 
    if (t < 0) 
    { 
     return "-"; 
    } 
    else 
    { 
     int secs = (int)(t/1000); 
     int mins = secs/60; 
     secs = secs - (mins * 60); 
     return String.format("%d:%02d", mins, secs); 
    } 
} 

당신이 볼 수 있듯이, 나는 지금까지 아래로 변수 선언을 추진했습니다 나는 (이것은 C++과 Java에서 선호되는 스타일이다). 또한 ans을 제거하고 String.format()에 대한 단일 호출로 문자열 연결과 String.format()의 조합을 대체했습니다.

3

Java에서 문자열은 힙 할당 저장소에 대한 참조입니다. "ans"를 반환하면 참조가 반환되므로 스택에 할당 된 저장소가 필요하지 않습니다. 실제로 스택 저장소에 객체를 할당하는 방법은 없습니다.

그러나 나는 이것을 바꿀 것입니다. "ans"는 전혀 필요하지 않습니다.

return String.format("%d:%d", mins, secs); 
관련 문제