为什么我请求的变量在从另一个 class 调用时显示为 0.0?

Why are the variables I'm requesting showing up as 0.0 when called from another class?

所以基本上我的程序是一个 StudySchedule,它接受用户输入(StudyTime、Subjects、PrioritizedSubjects、PriorityScale),然后根据这些值中的每一个创建一个时间表。它以接受所有用户输入的 class CreateSchedule 开始,然后我的另一个 class CalculateScheduleTime 接受输入并进行计算(计算确实扩展到创建)。

但是当我从 CreateSchedule 向 CalculateScheduleTime 请求变量时,变量显示为 0.0 而不是我输入的数字。


class CreateSchedule extends Test {

    public String ScheduleName;
    public double userStudyTime;
    public double userSubjects;
    public double userPrioritySubjects;
    public double userSubjectScale;

    public String getScheduleName() {
        ScheduleName = setScheduleName();
        return (ScheduleName);
    }

    public double getuserStudyTime() {
        userStudyTime = setuserStudyTime();
        return (userStudyTime);
    }

    public double getuserSubjects() {
        userSubjects = setuserSubjects();
        return (userSubjects);
    }

    public double getuserPrioritySubjects() {
        userPrioritySubjects = setuserPrioritySubjects();
        return (userPrioritySubjects);
    }

    public double getuserPriorityScale() {
        userSubjectScale = setuserPriorityScale();
        return (userSubjectScale);
    }

    public static String setScheduleName(){
        System.out.println("What would you like to name your Schedule?");
        Scanner sch = new Scanner(System.in);
        return sch.nextLine();
    }

    public static double setuserStudyTime(){
        System.out.println("How many hours are you studying for?");
        Scanner sch = new Scanner(System.in);
        return sch.nextDouble();
    }

    public static double setuserSubjects (){
        System.out.println("How many subjects are you studying?");
        Scanner sch = new Scanner(System.in);
        return sch.nextDouble();
    }

    public static double setuserPrioritySubjects (){
        System.out.println("How many subjects are you prioritizing?");
        Scanner sch = new Scanner(System.in);
        return sch.nextDouble();
    }

    public static double setuserPriorityScale (){
        System.out.println("On a scale of 1 - 5, how much priority would you like to give the prioritized subjects?");
        Scanner sch = new Scanner(System.in);
        return sch.nextDouble();
    }

    public double confirm() {
        System.out.println("Input Results:");
        System.out.println("Schedule Name: " + ScheduleName);
        System.out.println("Study Time: " + userStudyTime);
        System.out.println("Subjects: " + userSubjects);
        System.out.println("Priority Subjects: " + userPrioritySubjects);
        System.out.println("Priority Scale" + userSubjectScale);
        return (0);
    }

}

class CalculateScheduleTime extends CreateSchedule {

    public double SubjectPriorityTime;
    public double SubjectRemainderTime;

    public CalculateScheduleTime() {

    }

    public double calcSubjectPriorityTime() {
        System.out.println("Priority" + userSubjectScale);
        double PriorityPercent = ((double) (userSubjectScale / 5.0));
        System.out.println(userSubjectScale);
        SubjectPriorityTime = ((double) (PriorityPercent * userStudyTime));
        System.out.println("Time to Prioritized Subject is: " + SubjectPriorityTime);
        return (SubjectPriorityTime);
    }

    public double calcSubjectRemainderTime() {
        System.out.println("Remainder");
        SubjectRemainderTime = ((double) (SubjectPriorityTime - userStudyTime));
        System.out.println("Remainder time to Subject is: " + SubjectRemainderTime);
        return (SubjectRemainderTime);
    }
}

public class Test {
    public static void main(String[] args) {
        CreateSchedule user = new CreateSchedule();
        user.getScheduleName();
        user.getuserStudyTime();
        user.getuserSubjects();
        user.getuserPrioritySubjects();
        user.getuserPriorityScale();
        user.confirm();

        CalculateScheduleTime calc = new CalculateScheduleTime();
        calc.calcSubjectPriorityTime();
        calc.calcSubjectRemainderTime();
    }
}

这不是 subclassing 的目的。

A class 描述了给定实例可以做什么。 “狗”是一只class。 “Lassie”就是它的一个例子。

Subclassing 是你对概念而不是实例所做的事情。例如,你可能有一个 class “Animal”,和一个子 class “Dog”:有,也许还有一些额外的东西和属性(用 java 的说法:它将拥有 superclass 的所有字段和方法,并且可以添加更多。它不能删除任何)。

当你写 CreateSchedule user = new CreateSchedule(); 就像写:Dog rover = new Dog(); - 然后你写 CalculateScheduleTime calc = new CalculateScheduleTime(); 就像写 GermanSchnauser fifi = new GermanSchauser();.

你制作了一只全新的狗,它获得了所有这些字段的副本,这些字段仍然是 0 - 未初始化。

'calc' 的内容可能应该放在 CreateSchedule 中。但是这段代码有很多错误:

  • 类代表有形的概念。一个好的 class 名字是 'Schedule'。或者 'ScheduleCreator'。 'CreateSchedule' 不是正确的 class 名称,将其视为 'the code for creating schedules' 完全不正确,考虑 classes 的正确方法是考虑它们代表什么。 “这是解释 Schedules 可以做什么以及如何创建它们的代码”,这是一种正确的思考方式(class 将被称为 Schedule。而不是 CreateSchedule)。
  • 名为 getX 的方法不应有副作用。
  • 你不应该每次都制作新的扫描仪。
  • setters 接受争论。他们不问用户。
  • 单独关注。一个 Schedule 应该只做日程表的事情——其他的事情应该做与用户的交互。为此(可能是 TextBasedScheduleCreator)的主要方法或 class。
  • 那些 calcX() 方法将结果存储在一个字段中,return 它,并且该字段实际上从未在任何地方使用过。就return吧,没有那个字段。