得到0输出而不是正确的输出

时间:2019-04-13 14:24:06

标签: java

我可以输入,但在输出中,我得到的结果为零。我正在使用两个班级,一个主要是日志,另一个是成绩计算。在成绩计算器中,我编写了方法和构造函数,在日志中,类通过构造函数调用了这些方法。

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);  
    }   
}

3 个答案:

答案 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)

您正在GradeCalculationAskmarks()中遮盖字段。删除函数内部变量的类型声明。因此,代替:

...
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不再存在于其内部观点。