2017-09-15 9 views
0

これについては少し問題があります。私は、労働者階級の定期労働(40時間)と時間外労働(40歳以上)をpayTotalと一緒に返す必要があります。私のワーカークラスは、私のPersonクラスのサブクラスです。私はまだそれをまだ終えていないが、私はこのクラスで正しい方向に向かっているかどうかを知りたい。ここに私の現在のメソッドJavaの1つのメソッドから3つの文字列を返す方法

String displayWeeklyPay(double hoursWorked){ 
    double overtime; 
    double regular; 
    String result; 
    if (hoursWorked <= 40) 
     { 
     payTotal = hourlyPayRate * hoursWorked; 
     regular = payTotal; 
     overtime = 0; 
     } 
    else{ 
     payTotal = (hourlyPayRate * 40) + ((hoursWorked - 40) * (hourlyPayRate * 1.5)); 
     regular = hourlyPayRate * 40; 
     overtime = ((hoursWorked - 40) * (hourlyPayRate * 1.5)); 
     } 
    String overT = String.valueOf(overtime); 
    String reg = String.valueOf(regular); 
    String totalPay = String.valueOf(payTotal); 

のための私のコードは、私たちは、私がこれを返すだろうか、非常にわからないので、このメソッドは文字列を返すように言われたです。私は配列を示唆するいくつかの投稿を見たことがありますが、後で私のワーカーコンストラクタにこれらの値(通常、残業、支払い総額)を渡す必要がある場合、コンストラクタを配列の3つの文字列で区別できるようになりますか? ありがとう

+0

1つ以上のものを返すには、すべてのものを1つのオブジェクトに貼り付ける必要があります。どのオブジェクトを貼り付けるかは、多くのことに依存します。彼らがかなり関連していて、あなたが設定された量を持っているならば、各部分のフィールドを持つクラスを作り、クラスのインスタンスを返すことができます。あなたはArray/ArrayListにそれらを貼り付けることもできますし、後でピースを選択してください。 – Carcigenicate

答えて

3

3つの文字列を持つ配列を返すことは、意味がなくエラーが発生しやすいclumsyです。

3つのStringフィールドを所有するカスタムクラスを作成し、そのメソッドのインスタンスをメソッドに戻す必要があります。

あなたの方法はそうのようになります。

public MyResult displayWeeklyPay(double hoursWorked){ 

    ...  
    String overT = String.valueOf(overtime); 
    String reg = String.valueOf(regular); 
    String totalPay = String.valueOf(payTotal); 
    return new MyResult(overT, reg, totalyPay); 
} 

あなたは以上の三つのフィールドを使用する場合は、コンストラクタを使用して、おそらく渡される引数の順序は、エラーが発生しやすくなるかもしれとして最善の方法ではありません。
おそらく、セッターや流暢なビルダーのアプローチが望ましいでしょう。

+0

私のWorkerのコンストラクタは、super()を使ってPersonのコンストラクタを呼び出し、残りのフィールドを設定します。指示状態は、 "displayWeeklyPayは、定期的な賃金の時間数(40)と残業手当の総数と時間数と総額と総賃金の合計を表示する必要があります。私は必然的にハードコード/取得し、それぞれの定期的に、OTと私が考えていない総額を設定するはずではない。そのメソッドを呼び出して、それを返すだけです –

2

さまざまなオプション:

  • 簡単なリターン文字列a + "/" + b + "/" + c(悪い考え)
  • リターン配列またはList<String>

推奨オプション:特定クラスを作成する「というラップこれらの3つの値の「周り」にある。そしてあなたのメソッドはそのクラスのインスタンスを返します!

レコードの場合:他の人が読み取れる3つのフィールドを持つクラスを作成しないでください。に書き込みます。むしろ、コンストラクタ呼び出しによってフィールド値を設定します。コンテンツを取得する方法はgetterです。

0

戻り値の型が文字列でなければならない場合は、可能であれば、区切り記号(おそらくカンマ)を使用して連結し、必要に応じて分割します。もちろん、メソッドのシグネチャを変更できない場合にのみ、これを行う必要があります。可能であれば、Objectまたは文字列を返すことによって優先される戻り値の型を変更します。

関連する問題