我可以输入,但在输出中,我得到的结果为零。我正在使用两个班级,一个主要是日志,另一个是成绩计算。在成绩计算器中,我编写了方法和构造函数,在日志中,类通过构造函数调用了这些方法。
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);
}
}
答案 0 :(得分:1)
问题是您在Askmarks
double quiz = kb.nextDouble();
...
double finaltest = kb.nextDouble();
它们不会影响字段
private double quiz, midsemester ,appliedproject ,finaltest,finalmarks;
,因此,在finalmark
中,您将获得每个double
字段的默认值0.0
。
解决方案将是设置字段,而不是初始化局部变量。
this.quiz = kb.nextDouble();
...
this.finaltest = kb.nextDouble();
答案 1 :(得分:0)
在您的Askmarks
方法中,您将使用double
开头来重新定义变量。如果您从doubles
方法中删除Askmarks
,它应该可以工作。
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();
}
答案 2 :(得分:0)
您正在GradeCalculation
中Askmarks()
中遮盖字段。删除函数内部变量的类型声明。因此,代替:
...
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
不再存在于其内部观点。