#java
#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);
}
}
Комментарии:
1. Вы никогда нигде не инициализируете свои поля (т. Е.
this.quiz
И т. Д.). Все, что вы делаете в AskMarks (который должен быть назван askMarks), — это инициализация локальных переменных, которые имеют то же имя, что и поля2. Вы затеняете свои поля
AskMarks()
. 🙂3. спасибо за решение этой проблемы, хорошего вам друга
Ответ №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. @aNKY, было бы здорово, если бы вы установили флажок в этом ответе, поскольку вы обнаружите, что этот ответ решает вашу проблему.
Ответ №2:
В вашем 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();
}
Ответ №3:
Вы затеняете свои поля в GradeCalculation
in 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
больше не существует в его точке зрения.
Комментарии:
1. На самом деле, здесь нет затенения, OP не ссылался ни на какие локальные переменные после их инициализации
2. Я не думаю, что вам нужно ссылаться на какие-либо локальные переменные, прежде чем может произойти затенение. Затенение уже произошло, поскольку OP определил локальные переменные с тем же именем, что и переменные экземпляра.
3. Я полностью согласен с тем, что «двойная викторина затенит викторину класса». Я просто говорю, что определение переменной с более узкой областью видимости и игнорирование ее не приводит к затенению. Итак, технически во фрагменте OP нет затенения / скрытия.