0

インスタンス変数ごとに set メソッドと get メソッドを提供します。月給が正でない場合は、その値を設定しないでください。

私が抱えている問題は、「値を設定していない」ことです。これが私のコードです:

Main.class

public class Main {

public static void main(String[] args) {

Employee myEmp  = new Employee("William", "Russell", 30000);
Employee myEmp2  = new Employee("Yevgeniya", "Pakhom", -1);
myEmp.displayMessage();
myEmp2.displayMessage();
}
}

Employee.class


public class Employee {

    private String fName;
    private String lName;
    private double ySalary;

public Employee (String firstName, String lastName, double yearSalary)
    {
        fName = firstName;
        lName = lastName;
        ySalary = yearSalary;
    }
// Set First Name
    public void setFName (String firstName)
        {
        fName = firstName;
        }
// Get First Name
    public String getFName()
        {
        return fName;
        } 

   // Set Last Name
    public void setLName (String lastName)
        {
        lName = lastName;
        }
  //  Get Last Name
    public  String getLName()
        {
        return lName;
        } 

 // Set Salary
    public void setSalary (double yearSalary)
        {

            ySalary = yearSalary;

        }
// Get Salary
    public double getYearSalary()
        {

        return ySalary;

        }
// Display method
        public void displayMessage()
        {
            if (ySalary < 0)
                 System.out.printf("Hello %s %s, \nI see you're       currently making: %.2f\n", getFName(), getLName(),getYearSalary() );


 }
}

displayMessage() メソッドに if ステートメントを入れました。しかし、それは「何も設定しない」ことではないと思います。

私の妻も同様の問題を抱えており、「Get」の下に設定しましたが、私のものは同じように機能していません。

4

8 に答える 8

1

setSalary を次のように変更します

public void setSalary (double yearSalary)
        {
            if (yearSalary <= 0) {
                 throw new IllegalArgumentException("yearSalary: " + yearSalary);
            }
            ySalary = yearSalary;
        }
于 2013-03-05T07:08:19.240 に答える
0

あなたのsetSalary()メソッドでそれを設定するべきではありません。それはあなたのsetterためsalaryです。

あなたの場合、内部でConstructor十分です。

public Employee (String firstName, String lastName, double yearSalary)
{
        fName = firstName;
        lName = lastName;
        if(yearSalary >= 0){
            ySalary = yearSalary;
        }
}
于 2013-03-05T07:05:46.947 に答える
0

代わりに、コンストラクター内でこの関数を呼び出す必要があります。またはif、コンストラクターの内部に配置します。

于 2013-03-05T07:06:51.613 に答える
0

setSalaryメソッド内の前提条件を確認する必要があり、オプションで例外(IllegalArgumentExceptionなど)をスローする場合があります。

于 2013-03-05T07:07:44.277 に答える
0
class Employee{

   //Use factory method instead to check for pre conditions
   public static Employee newEmployee(String firstName, String lastName, double salary){
       if(salary < 0){
          throw new IllegalArgumentException("Salary cannot be negetive");
       }

      return new Employee(firstName, lastName, salary);
   }

}

セッターメソッドもある場合は、否定の条件もチェックして、不正な引数例外をスローする必要があります。

ファクトリ メソッドを使用する理由:コンストラクタで作業を行うことは推奨されないため、ファクトリ メソッドまたは実際のファクトリで事前条件チェックを行うことがベスト プラクティスです。

于 2013-03-05T07:10:07.217 に答える
0

setSalary() で、給与が <0 かどうかを確認できます。0 である場合は設定しないでください。

public void setSalary (double yearSalary)
        {
            if(yearSalary >0 ){
                 ySalary = yearSalary;
           }
        }
于 2013-03-05T07:11:07.730 に答える
0

コンストラクターを介して給与を設定していますが、セッターはまったく使用されていません。必要に応じて、コンストラクターに検証を追加します。

于 2013-03-05T07:12:22.780 に答える
0

Double を使用するようにコードを変更しました。これが null 値の設定に役立つことを願っています。

public class JavaMainTest {

public static void main(String[] args) {

Employee myEmp  = new Employee("William", "Russell", 30000d);
Employee myEmp2  = new Employee("Yevgeniya", "Pakhom", null);
Employee myEmp3  = new Employee("Sernea", "Monsen", -1d);
myEmp.displayMessage();
myEmp2.displayMessage();
myEmp3.displayMessage();
}
}



 class Employee {

    private String fName;
    private String lName;
    private Double ySalary;

public Employee (String firstName, String lastName, Double yearSalary)
    {
        fName = firstName;
        lName = lastName;
        if (yearSalary!=null)
        ySalary = yearSalary;
    }
// Set First Name
    public void setFName (String firstName)
        {
        fName = firstName;
        }
// Get First Name
    public String getFName()
        {
        return fName;
        } 

   // Set Last Name
    public void setLName (String lastName)
        {
        lName = lastName;
        }
  //  Get Last Name
    public  String getLName()
        {
        return lName;
        } 

 // Set Salary
    public void setSalary (Double yearSalary)
        {

            ySalary = yearSalary;

        }
// Get Salary
    public Double getYearSalary()
        {

        return ySalary;

        }
// Display method
        public void displayMessage()
        {
            if (ySalary == null)
                 System.out.printf("Hello %s %s, \nI see you're       currently making: %.6f\n", getFName(), getLName(),getYearSalary() );
            else if (ySalary < 0)
                 System.out.printf("Hello %s %s, \nI see you're       currently making: %.2f\n", getFName(), getLName(),getYearSalary() );


 }
}
于 2013-03-05T07:14:32.750 に答える