2012-01-25 26 views
3

ミリ秒単位の時間をmins:secondsという形式の文字列に変換する次の関数を記述しました。私は以前のCプログラマであるため、正しく動作するためには "ans"は静的でなければならないと考えましたが、Stringの前に静的を置くことは許されないようです。javaで文字列を返す関数

私の質問です - この機能は動作しますか?そうでない場合は、どのような変更が機能しますか。

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 *あなた*はそれが動作するかどうかを伝えますか?やってみなよ。 – skaffman

+0

メソッドの名前を変更することを検討してください。 Javaのメソッド名は、ほとんど常にラクダの場合です。 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()への1回の呼び出しで置き換えました。

3

Javaでは、文字列はヒープ割り当てストレージへの参照です。 "ans"を返すと参照が返されるだけで、スタックに割り当てられた記憶域は必要ありません。実際、スタックストレージにオブジェクトを割り当てる方法はJavaではありません。

私はこれに変更します。 「ans」はまったく必要ありません。

return String.format("%d:%d", mins, secs); 
関連する問題