"ошибка: не удается найти символ" в отношении программы, связанной с наследованием

Я получил сообщение говорит 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 должно быть либо

  1. локальная переменная, объявленная в методе main
  2. поле, определенное в классе ExamDetails

Ни одно из этих объявлений не присутствует, поэтому компилятор говорит вам, что он не может найти оценку "символ".

Попробуйте добавить int grade = sr.getExamGrade(); выше проблемной линии, или что-то подобное.

Как говорится в комментарии, вам нужно объявить "оценку". Без этого компилятор не сможет завершить определение подписи для Certficates.certificateAwarded, поскольку то, что входит в список аргументов, является частью подписи. Что еще более важно, у вас есть это в вашем коде:

Сертификат StringAwarded(/* int grade */)

Параметр "int grade" закомментирован. Таким образом, компилятор видит это:

Сертификат строки Awarded()

Таким образом, компилятор может вам сказать, что он ищет метод Certificates с именем CertificateAwarded, который принимает 1 аргумент типа {независимо от типа "grade"}. Это не находит это.

Я сказал "может быть", потому что вам не хватает двух символов в рассматриваемой строке: оценка и метод с совпадающей подписью.

Я могу думать о двух вещах, которые вы можете попытаться исправить:

  1. Изменить " c1.certificateAwarded(grade);" to "c1.certificateAwarded();"
  2. Объявите "grade" как int где-то в main (или в месте, которое видно внутри main) и замените "String CertificateAwarded (/int grade/)" на "String CertificateAwarded(int grade)".

Я бы начал с первого варианта. Если необходимо попробовать второй вариант, вам потребуется добавить дополнительный код как в основной (или в место, где оценка видна основным), так и в методе certificateAwarded.

Другие вопросы по тегам