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