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

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

但是当我从 CreateSchedule 请求 variables 到 CalculateScheduleTime 时,variables 显示为 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();
    }
}

回答1

这不是子类化的目的。

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

子类化是你对概念而不是实例所做的事情。例如,您可能有一个 class“Animal”和一个子类“Dog”:Dog 只是专门化了 Animal:Any Dog 也是 Animal,因此可以做并拥有所有 Animals 所具有的所有属性,也许还有一些额外的属性事物和属性(用 java 的说法:它将拥有超类的所有字段和方法,并且可以添加更多。它不能删除任何内容)。

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

您制作了一条全新的狗,它拥有所有这些字段的自己的副本,这些字段仍然是 0 - 未初始化。

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

  • Classes 代表有形的概念。一个好的 class 名称是“Schedule”。或者也许是“ScheduleCreator”。 'CreateSchedule' 不是一个正确的 class 名称,将其视为“创建时间表的代码”是完全不正确的,考虑 classes 的正确方法是关于它们所代表的内容。 “这是解释 Schedules 可以做什么以及如何创建它们的代码”,这是考虑它的正确方法(并且 class 将被称为 Schedule. Not CreateSchedule)。
  • 名为 getX 的方法不应有副作用。
  • 您不应该每次都制作新的扫描仪。
  • 设置者接受一个论点。他们不问用户。
  • 分开关注。 Schedule 应该只是安排一些事情——其他事情应该是与用户进行交互。为此的主要方法或 class (可能是基于文本的计划创建器)。
  • 那些 calcX() 方法 store 将结果放在一个字段中,将其返回,并且该字段从未在任何地方实际使用过。直接退货吧,没有那个字段。

相似文章

go - Go DNS 问题 TCP 使用 UDP 传输正常

我已经尝试了我能想到的一切,但我正在碰壁。我想知道是否有人能够指出我正确的方向或可能发现问题?我有一个go来编写我自己的DNS服务器有几个原因,主要是学习经验。有几点要提:我正在使用Go使用"gopa...

list - 如何优化以下功能

我在使用以下功能时遇到瓶颈问题。处理lists的list花费的时间太长。我将要详细介绍的list有数百万个lists(最多可以容纳近40M个lists)。该函数遍历lists的list并且对于其第10...

最新文章