Java:将不同 class 的覆盖方法中的值更改为在 class 中计算的值

Java: Change a value in an overridden method of a different class to a value that was calculated in the class

如何让覆盖方法 calculateResult() 在我的 StudentTest class 中正常工作?我需要 calculateResult() 中的 total 是根据用户输入在 StudentTest 中计算的 total。还是我的用户输入代码有误 class?

Student class

public class Student {

    // Data Members
    private String name;
    private int idNumber;
    private int examResult;

    // Constructor
    public Student() {
        name = "Unassigned";
        idNumber = 0;
        examResult = 0;
    }

    // Getters
    public String getName(){
        return name;
    }   

    public int getIdNumber(){
        return idNumber;
    }

    public int getExamResult(){
        return examResult;
    }

    // Setters
    public void setName(String name){
        this.name = name;
    }

    public void setIdNumber(int idNumber){
        this.idNumber = idNumber;
    }

    public void setExamResult(int examResult){
        this.examResult = examResult;
    }

    // Calculate Result 
    public void calculateResult() {
        int total = 0;
        int result = (total / 5);
        // Check if Student passed or failed
        if (result < 0) {
            System.out.println("Overall Result: " + result + " (Fail)");
        } else {
            System.out.println("Overall Result: " + result + " (Pass)");
        }
    }

} // end class

Undergraduate class

public class Undergraduate extends Student {

    public Undergraduate(){
        super();
    }

    // Method to Calculate Result
    @Override
    public void calculateResult() {
        int total = 0; // Want this total to be the total in StudentTest
        int result = (total / 5);
        // Check if Student passed or failed
        if (result < 50) {
            System.out.println("Overall Result: " + result + " (Fail)");
        } else {
            System.out.println("Overall Result: " + result + " (Pass)");
        }
    } // end method

} // end class

Postgraduate class

public class Postgraduate extends Student{

    public Postgraduate(){
        super();
    }

    // Method to Calculate Result
    @Override   
    public void calculateResult() {
        int total = 0; // Want this total to be the total in StudentTest
        int result = (total / 5);
        // Check if Student passed or failed
        if (result < 40) {
            System.out.println("Overall Result: " + result + " (Fail)");
        } else {
            System.out.println("Overall Result: " + result + " (Pass)");
        }
    } // end method

} // end class

StudentTest class

import java.util.Scanner;

public class StudentTest {
    public static void main(String [] args){

        // Declaration & Creation of Scanner object
        Scanner input = new Scanner(System.in);

        // Create Array of Undergrad and Postgrad Students
        Student[] students = new Student[5];
        students[0] = new Undergraduate();
        students[1] = new Postgraduate();
        students[2] = new Undergraduate();
        students[3] = new Postgraduate();
        students[4] = new Undergraduate();


        // Get Input for Name 
        for (int i = 0; i < students.length; i++) {
            System.out.println();
            System.out.print("Enter Student Name: ");
            students[i].setName(input.nextLine());

            // Get Input for Id Number
            System.out.print("Enter Student ID Number: ");
            students[i].setIdNumber(input.nextInt());
            input.nextLine();

            // Initialise Variables
            int examsEntered = 0;
            int total = 0;

            // Get Input for Exam Result and add to total
            while (examsEntered < 5) {
                System.out.print("Enter Exam Result (0-100): ");
                students[i].setExamResult(input.nextInt());
                input.nextLine();
                if (students[i].getExamResult() >= 0 && students[i].getExamResult() <= 100) {
                    total = total + students[i].getExamResult(); // This is the total I want in my calculateResult method 
                    examsEntered = examsEntered + 1;
                } else {
                    System.out.println("Please Enter a Valid Number 0-100");
                }
            }
        }

        for (int i = 0; i < students.length; i++) {
        // Display Student Info and Results
            System.out.println();
            System.out.println("Student Name: " + students[i].getName());
            System.out.println("Student ID: " + students[i].getIdNumber());
            students[i].calculateResult();
            System.out.println();
        }

    } // end main

} // end class

这与您的代码没有 "save" 总值有关。

我会推荐

  1. 你有一个 examResults 的 int 数组
  2. 然后在您的 calculateResult 方法中,求和以确定平均值
  3. 注意整数除法问题

无法理解您要实现的目标。您是要计算每个学生的平均分数还是所有学生的平均分数? 您也无法在没有引用的情况下从 class 学生(以及所有被覆盖的 classes)外部访问变量(总计)。

这是我的建议:

public class Student {
       // Data Members
    private String name;
    private int idNumber;
    private List<Integer> examResults;

    // Constructor
    public Student() {
        name = "Unassigned";
        idNumber = 0;
        examResults = new ArrayList<Integer>(5);
    }

    // Getters
    public String getName(){
        return name;
    }   

    public int getIdNumber(){
        return idNumber;
    }

    public void addResult(Integer result){
        examResults.add(result);
    }

    // Setters
    public void setName(String name){
        this.name = name;
    }

    public void setIdNumber(int idNumber){
        this.idNumber = idNumber;
    }

    // Calculate Result 
    protected Integer calculateResult() {

        Integer total = 0;

        for(Integer result : examResults){
            total += result;
        }

        return total / examResults.size();
    }

    public void showResultText(){
        Integer result = calculateResult();

        // Check if Student passed or failed
        if (result < 0) {
            System.out.println("Overall Result: " + result + " (Fail)");
        } else {
            System.out.println("Overall Result: " + result + " (Pass)");
        }
    }
}

public class Undergraduate extends Student {
    @Override
    public void showResultText() {

        Integer result = calculateResult();

        if (result < 50) {
            System.out.println("Overall Result: " + result + " (Fail)");
        } else {
            System.out.println("Overall Result: " + result + " (Pass)");
        }
    }
}

public class Postgraduate extends Student {
    @Override
    public void showResultText() {

        Integer result = calculateResult();

        if (result < 40) {
            System.out.println("Overall Result: " + result + " (Fail)");
        } else {
            System.out.println("Overall Result: " + result + " (Pass)");
        }
    }
}

public class StudentTest {
    public static void main(String [] args){

        // Declaration & Creation of Scanner object
        Scanner input = new Scanner(System.in);

        // Create Array of Undergrad and Postgrad Students
        Student[] students = new Student[5];
        students[0] = new Undergraduate();
        students[1] = new Postgraduate();
        students[2] = new Undergraduate();
        students[3] = new Postgraduate();
        students[4] = new Undergraduate();


        // Get Input for Name 
        for (Student student :  students) {
            System.out.println();
            System.out.print("Enter Student Name: ");
            student.setName(input.nextLine());

            // Get Input for Id Number
            System.out.print("Enter Student ID Number: ");
            student.setIdNumber(input.nextInt());
            input.nextLine();

            // Initialise Variables
            int examsEntered = 0;

            // Get Input for Exam Result and add to total
            while (examsEntered < 5) {
                System.out.print("Enter Exam Result (0-100): ");
                Integer result = input.nextInt();
                input.nextLine();
                if (result >= 0 && result <= 100) {
                    student.addResult(result);
                    examsEntered++;                    
                } else {
                    System.out.println("Please Enter a Valid Number 0-100");
                }
            }
        }

        for (Student student :  students) {
        // Display Student Info and Results
            System.out.println();
            System.out.println("Student Name: " + student.getName());
            System.out.println("Student ID: " + student.getIdNumber());
            student.showResultText();
            System.out.println();
        }

    } // end main
}