簡體   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