-2

質問はかなり長いですが、私が提供した情報が十分であることを願っています. BaysittingJobオブジェクトを構築してその値を表示する必要があるポイントを除いて、すべてのコードが機能します。どうもありがとう。

アプリケーションで目的の結果を出力できません。次のようになっています。

  1. 2 桁の年号と 4 桁の連番でジョブ番号を表示する
  2. 選択したベビーシッター コードに基づいて、暗殺されたベビーシッター (コードは 1 から 3 まで)
  3. 子供の数
  4. 労働時間数
  5. 勤務時間数と選択したベビーシッターに基づく料金 ベビーシッター コードが 1 の場合、1 時間あたり $7 の料金が請求されます ベビーシッター コードが 2 または 3 の場合、料金は最初の子供の場合は 1 時間あたり $9 で、追加の子供は 1 時間あたり $4 です子

BabysittingJob

public class BabysittingJob {

    private int jobNumber;
    private int babysitterCode;
    private String babysitter;
    private int childrenNumber;
    private int hoursWorked;
    private double fee;

    public BabysittingJob(int year, int sequentialNumber, int babysitterCode, int childrenNumber, int hoursWorked, String babysitter) {
        year = year % 2000;
        int jobNumber = ((year * 10000) + sequentialNumber);
        if (babysitterCode == 1) {
            babysitter = "Cindy";
        } else if (babysitterCode == 2) {
            babysitter = "Greg";
        } else if (babysitterCode == 3) {
            babysitter = "Marcia";
        }
    }

    {

        if (babysitterCode == 1) {
            fee = hoursWorked * 7 * childrenNumber;
        } else if (babysitterCode > 1 && childrenNumber == 1) {
            fee = hoursWorked * 9 * childrenNumber;
        } else if (babysitterCode > 1 && childrenNumber > 1) {
            fee = (hoursWorked * 9) + ((--childrenNumber) * hoursWorked * 4);
        }
    }

    public void displayResult() {
        System.out.println("Your job number is:" + jobNumber + "Your baby sitter is:" + babysitter
                + "The number of children is:" + childrenNumber + "The number of hours worked is:"
                + hoursWorked + "Your fee is $:" + fee);
    }
}

CreateBabysittingJob...

import java.util.Scanner;

public class CreateBabysittingJob {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter year.");
        int year = input.nextInt();
        while (year < 2013 || year > 2025) {
            System.out.println("Enter a year between 2013 and 2025");
            year = input.nextInt();
        }
        System.out.print("Enter job number");
        int jobNumber = input.nextInt();
        while (jobNumber < 1 || jobNumber > 9999) {
            System.out.println("Enter a number between 1 and 9999");
            jobNumber = input.nextInt();
        }
        System.out.print("Enter babysitter code");
        int babysitterCode = input.nextInt();
        while (babysitterCode < 1 || babysitterCode > 3) {
            System.out.println("Enter a number between 1 and 3");
            babysitterCode = input.nextInt();
        }
        System.out.print("Enter number of children");
        int childrenNumber = input.nextInt();
        while (childrenNumber < 1 || childrenNumber > 9) {
            System.out.println("Enter a number between 1 and 9");
            childrenNumber = input.nextInt();
        }
        System.out.print("Enter number of hours");
        int hoursWorked = input.nextInt();
        while (hoursWorked < 1 || hoursWorked > 12) {
            System.out.println("Enter a number between 1 and 12");
            hoursWorked = input.nextInt();
        }
        BabysittingJob ca = new BabysittingJob(year, jobNumber, babysitterCode, childrenNumber, hoursWorked);
        ca.displayResult();
    }
}
4

2 に答える 2

0

クラス コンストラクターのパラメーターをプライベート変数に割り当てる必要があります。

public class BabysittingJob {

    private int jobNumber;
    private int babysitterCode;
    private String babysitter;
    private int childrenNumber;
    private int hoursWorked;
    private double fee;

    public BabysittingJob(int year, int sequentialNumber, int babysitterCode, int childrenNumber, int hoursWorked, String babysitter) {
        year = year % 2000;
        this.childrenNumber = childrenNumber;
        this.hoursWorked = hoursWorked;
        this.babysitterCode = babysitterCode;
        this.jobNumber = ((year * 10000) + sequentialNumber);

        if (babysitterCode == 1) {
            this.babysitter = "Cindy";
        } else if (babysitterCode == 2) {
            this.babysitter = "Greg";
        } else if (babysitterCode == 3) {
            this.babysitter = "Marcia";
        }

        if (babysitterCode == 1) {
            this.fee = hoursWorked * 7 * childrenNumber;
        } else if (babysitterCode > 1 && childrenNumber == 1) {
            this.fee = hoursWorked * 9 * childrenNumber;
        } else if (babysitterCode > 1 && childrenNumber > 1) {
            this.fee = (hoursWorked * 9) + ((--childrenNumber) * hoursWorked * 4);
        }
    }
}
于 2013-10-09T03:36:39.010 に答える
0

私が見つけたいくつかの特徴があります...

まず、のコンストラクターを次のように定義しますBabysittingJob...

public BabysittingJob(int year, int sequentialNumber, int babysitterCode, int childrenNumber, int hoursWorked, String babysitter) {

しかし、あなたはそれを使用してインスタンスを構築しようとします

BabysittingJob ca = new BabysittingJob(year, jobNumber, babysitterCode, childrenNumber, hoursWorked);

これには がありませんbabysitter。問題は、実際にはコンストラクター内にbabysitter基づいて値を決定しているbabysitterCodeことです...

public BabysittingJob(int year, int sequentialNumber, int babysitterCode, int childrenNumber, int hoursWorked, String babysitter) {
    year = year % 2000;
    int jobNumber = ((year * 10000) + sequentialNumber);
    if (babysitterCode == 1) {
        babysitter = "Cindy";
    } else if (babysitterCode == 2) {
        babysitter = "Greg";
    } else if (babysitterCode == 3) {
        babysitter = "Marcia";
    }
}

問題は、babysitter同じ名前のクラス インスタンス フィールドをシャドーイングしていることです。つまり、この変数に割り当てたものは、コンストラクタの外では意味がなく、インスタンス フィールドはそのままです。null

もう1つの特徴は、次のコードがどこにもないところにぶら下がっていることです...

{
    if (babysitterCode == 1) {
        fee = hoursWorked * 7 * childrenNumber;
    } else if (babysitterCode > 1 && childrenNumber == 1) {
        fee = hoursWorked * 9 * childrenNumber;
    } else if (babysitterCode > 1 && childrenNumber > 1) {
        fee = (hoursWorked * 9) + ((--childrenNumber) * hoursWorked * 4);
    }
}

たとえば、コンストラクター内でやりたいと「思う」...

public BabysittingJob(int year, int sequentialNumber, int babysitterCode, int childrenNumber, int hoursWorked) {
    year = year % 2000;
    int jobNumber = ((year * 10000) + sequentialNumber);
    if (babysitterCode == 1) {
        babysitter = "Cindy";
    } else if (babysitterCode == 2) {
        babysitter = "Greg";
    } else if (babysitterCode == 3) {
        babysitter = "Marcia";
    }
    if (babysitterCode == 1) {
        fee = hoursWorked * 7 * childrenNumber;
    } else if (babysitterCode > 1 && childrenNumber == 1) {
        fee = hoursWorked * 9 * childrenNumber;
    } else if (babysitterCode > 1 && childrenNumber > 1) {
        fee = (hoursWorked * 9) + ((--childrenNumber) * hoursWorked * 4);
    }
}

あなたが望むものにあなたを近づけるべきだと思います

他に修正しなければならないもの...

  • コンストラクターchildrenNumberのクラスインスタンスフィールドにパラメーターを割り当てることはありません...childrenNumberthis.childrenNumber = childrenNumber
  • コンストラクターhoursWorkedのクラスインスタンスフィールドにパラメーターを割り当てることはありません...hoursWorkedthis.hoursWorked = hoursWorked
于 2013-10-09T03:28:29.010 に答える