所以基本上我的程序是一个 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 将结果放在一个字段中,将其返回,并且该字段从未在任何地方实际使用过。直接退货吧,没有那个字段。