为什么我请求的变量在从另一个 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吧,没有那个字段。
所以基本上我的程序是一个 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吧,没有那个字段。