繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM