代码之家  ›  专栏  ›  技术社区  ›  cred

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

  •  0
  • cred  · 技术社区  · 2 年前

    因此,基本上我的程序是一个StudySchedule,它接受用户输入(StudyTime、Subjects、PriorityScale),然后根据这些值创建一个时间表。它从一个类CreateSchedule开始,该类接受所有用户输入,然后我的另一个类CalculateScheduleTime接受输入并进行计算(Calculate扩展到Create)。

    但当我从CreateSchedule请求变量时,为了计算ScheduleTime,变量显示为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 回复  |  直到 2 年前
        1
  •  1
  •   rzwitserloot    2 年前

    这不是子类化的目的。

    类描述给定实例可以执行的操作。“狗”是一个类。“Lassie”就是一个例子。

    子类化是对概念而不是实例所做的事情。例如,您可能有一个类“Animal”,还有一个子类“Dog”:Dog只是专门研究动物:任何狗也是动物,因此可以做并且拥有所有动物拥有的所有属性,也许还有一些其他的东西和属性(用java的说法:它将拥有超类的所有字段和方法,并且可以添加更多。它不能删除任何字段和方法)。

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

    您创建了一个全新的dog,它获取所有这些字段的自己副本,这些字段仍然是0-未初始化的。

    “calc”的东西应该放进去 CreateSchedule 可能但是这个代码有一个很大的错误:

    • 类表示有形的概念。一个好的类名是“Schedule”。或者“ScheduleCreator”“CreateSchedule”不是一个合适的类名,将其视为“创建计划的代码”显然是不正确的,正确的方法是考虑类所代表的内容。“这是解释时间表可以做什么以及如何创建它们的代码”,这是一种正确的思考方式(该类将被称为Schedule。而不是CreateSchedule)。
    • 名为的方法 getX 不应该有副作用。
    • 您不应该每次都制作新的扫描仪。
    • setters接受参数。他们不会询问用户。
    • 单独关注点。一个日程表应该只做日程表的事情——其他的事情应该做与用户的交互。这可以是一个主方法或一个类(可能是TextBasedScheduleCreator)。
    • 那些 calcX() 方法将结果存储在字段中,然后返回,而该字段实际上从未在任何地方使用过。只要把它还给我,就不用那个字段了。