[英]getting 0 output instead of correct output
我可以输入,但在输出中,结果为零。 我正在使用两个班级,一个主要是日志,另一个是成绩计算。 在成绩计算器中,我编写了方法和构造函数,在日志中,类通过构造函数调用了这些方法。
import java.util.Scanner;
public class LogBook {
public static void main(String[] args) {
GradeCalculation g = new GradeCalculation();
g.Askmarks();
g.finalmark();
}
}
import java.util.Scanner;
public class GradeCalculation {
Scanner kb = new Scanner(System.in);
private double quiz, midsemester, appliedproject, finaltest, finalmarks;
GradeCalculation(double quiz, double midsemester, double appliedproject, double finaltest, double finalmarks){
}
GradeCalculation(){
}
public void Askmarks(){
System.out.print("Enter the QUIZ marks: ");
double quiz = kb.nextDouble();
System.out.print("Enter the midsemester marks: ");
double midsemester = kb.nextDouble();
System.out.print("Enter the appliedproject: ");
double appliedproject = kb.nextDouble();
System.out.print("Enter the finaltest: ");
double finaltest = kb.nextDouble();
}
public void finalmark(){
finalmarks= 0.1*(quiz)+0.2*(midsemester)+0.4*(appliedproject)+0.3*(finaltest);
System.out.print("Enter the final: " + finalmarks);
}
}
问题是您在Askmarks
中定义了局部变量
double quiz = kb.nextDouble();
...
double finaltest = kb.nextDouble();
他们不影响领域
private double quiz, midsemester ,appliedproject ,finaltest,finalmarks;
因此,在finalmark
,您将获得每个double
finalmark
字段的默认值0.0
。
解决方案是设置字段而不是初始化局部变量 。
this.quiz = kb.nextDouble();
...
this.finaltest = kb.nextDouble();
在Askmarks
方法中,您要在变量Askmarks
加上double
来重新定义它们。 如果您从Askmarks
方法中删除doubles
,它应该可以工作。
public void Askmarks(){
System.out.print("Enter the QUIZ marks: ");
quiz = kb.nextDouble();
System.out.print("Enter the midsemester marks: ");
midsemester = kb.nextDouble();
System.out.print("Enter the appliedproject: ");
appliedproject = kb.nextDouble();
System.out.print("Enter the finaltest: ");
finaltest = kb.nextDouble();
}
您在Askmarks()
GradeCalculation
中隐藏了字段。 删除函数内部变量的类型声明。 因此,代替:
...
double quiz = kb.nextDouble();
...
您应该使用:
...
quiz = kb.nextDouble();
...
要么
...
this.quiz = kb.nextDouble();
...
您正在做什么:
...
double quiz = kb.nextDouble();
...
double midsemester = kb.nextDouble();
...
是您用相同的名称遮盖了类字段(例如, double quiz
将遮盖类的quiz
)。 遮蔽是指在某个范围内声明和/或初始化的变量“替换”位于外部范围内的同名变量的行为。
在您的情况下, Askmarks()
现在将认为,例如, quiz
是仅存在于函数内部的局部变量,而类字段quiz
在其视点中不再存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.