"ошибка: не удается найти символ" в отношении программы, связанной с наследованием
Я получил сообщение говорит error: cannot find symbol
относительно c1.certificateAwarded(grade);
заявление. Я понятия не имею, в чем проблема. Действительно нужна вся помощь, которую я могу получить.
Вот код:
ExamDetails.java
package Exams;
import javax.swing.JOptionPane;
public class ExamDetails {
public static void main(String[] args) {
StudentResults sr = new StudentResults();
sr.inputStudentName();
sr.inputExamName();
sr.inputScore();
sr.inputGrade();
sr.DisplayDetails();
Certificates c1 = new Certificates();
c1.certificateAwarded(grade);
}
}
StudentResults.java
package Exams;
import javax.swing.JOptionPane;
public class StudentResults {
private String fullname;
private String examName;
private int examScore;
private int examGrade;
public String getStudentName()
{
return fullname;
}
public void setStudentName(String name)
{
fullname = name;
}
public String getExamName()
{
return examName;
}
public void setExamName(String exam)
{
examName = exam;
}
public int getExamScore()
{
return examScore;
}
public void setExamScore(int score)
{
examScore = score;
}
public int getExamGrade()
{
return examGrade;
}
public void setExamGrade(int grade)
{
examGrade = grade;
}
public void inputStudentName()
{
fullname = JOptionPane.showInputDialog("Enter the student's name");
}
public void inputExamName()
{
examName = JOptionPane.showInputDialog("Enter the subject's name");
}
public void inputScore()
{
String scoreString = new String();
JOptionPane.showInputDialog("Enter the student's score");
examScore = Integer.parseInt(scoreString);
}
public void inputGrade()
{
String gradeString = new String();
JOptionPane.showInputDialog("Enter the student's grade");
examGrade = Integer.parseInt(gradeString);
}
public String DisplayDetails()
{
String d;
d = "Student Name : " + fullname + "Exam Name : " + examName + "Score : " + examScore + "Grade : " + examGrade;
return d;
}
}
Certificates.java
package Exams;
public class Certificates extends StudentResults {
private String certificate;
public String Grade;
Certificates()
{
super();
certificate = "No Certificate Awarded";
}
String certificateAwarded(/*int grade*/) {
//StudentResults g = new StudentResults();
//Grade = g.inputGrade();
//Grade = inputGrade(examGrade);
if(Grade.equals("Grade : A"))
{
this.certificate = "Certificate of Excellence";
}
else
if(Grade.equals("Grade : B"))
{
this.certificate = "Certificate of Achievement";
}
else
if(Grade.equals("Grade : C"))
{
this.certificate = "Certificate of Achievement";
}
else
this.certificate = "No Certificate Awardedt";
return this.certificate;
}
}
3 ответа
В классе ExamDetails.java вы не объявляете и не создаете grade
переменная, которую вы передаете certificateAwarded
метод.
Кроме того, у вас есть параметры, закомментированные в вашем классе Certificates.java. Вы должны раскомментировать параметр.
Для вашего кода для компиляции, grade
должно быть либо
- локальная переменная, объявленная в методе main
- поле, определенное в классе ExamDetails
Ни одно из этих объявлений не присутствует, поэтому компилятор говорит вам, что он не может найти оценку "символ".
Попробуйте добавить int grade = sr.getExamGrade();
выше проблемной линии, или что-то подобное.
Как говорится в комментарии, вам нужно объявить "оценку". Без этого компилятор не сможет завершить определение подписи для Certficates.certificateAwarded, поскольку то, что входит в список аргументов, является частью подписи. Что еще более важно, у вас есть это в вашем коде:
Сертификат StringAwarded(/* int grade */)
Параметр "int grade" закомментирован. Таким образом, компилятор видит это:
Сертификат строки Awarded()
Таким образом, компилятор может вам сказать, что он ищет метод Certificates с именем CertificateAwarded, который принимает 1 аргумент типа {независимо от типа "grade"}. Это не находит это.
Я сказал "может быть", потому что вам не хватает двух символов в рассматриваемой строке: оценка и метод с совпадающей подписью.
Я могу думать о двух вещах, которые вы можете попытаться исправить:
- Изменить " c1.certificateAwarded(grade);" to "c1.certificateAwarded();"
- Объявите "grade" как int где-то в main (или в месте, которое видно внутри main) и замените "String CertificateAwarded (/int grade/)" на "String CertificateAwarded(int grade)".
Я бы начал с первого варианта. Если необходимо попробовать второй вариант, вам потребуется добавить дополнительный код как в основной (или в место, где оценка видна основным), так и в методе certificateAwarded.