Java:将不同类的重写方法中的值更改为在该类中计算的值

Java:将不同类的重写方法中的值更改为在该类中计算的值,java,overriding,Java,Overriding,如何使重写的方法calculateResult在StudentTest类中正常工作?我需要calculateResult中的total是在StudentTest中根据用户输入计算的总数。或者我的用户输入代码是否在错误的类中 学生班 研究生班 这与代码没有保存总数的值有关 我建议 您有一个用于examResults的int数组 然后在calculateResult方法中,将总数相加以确定平均值 请注意整数除法问题 无法理解你想要实现的目标。你是想计算每个学生的平均分数还是所有学生的平均分数? 在没

如何使重写的方法calculateResult在StudentTest类中正常工作?我需要calculateResult中的total是在StudentTest中根据用户输入计算的总数。或者我的用户输入代码是否在错误的类中

学生班

研究生班


这与代码没有保存总数的值有关

我建议

您有一个用于examResults的int数组 然后在calculateResult方法中,将总数相加以确定平均值 请注意整数除法问题
无法理解你想要实现的目标。你是想计算每个学生的平均分数还是所有学生的平均分数? 在没有引用的情况下,您也不能从您的类学生和所有重写的类外部访问变量总计

以下是我的建议:

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
}

在问题中,它规定所有这些信息必须保存在一个集合中。有一个数组用于考试结果会改变这一点吗?我指的是在学生课堂上有这个数组,而不是在学生测试课堂上,我试图得到每个学生的平均数。谢谢你的帮助。
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
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
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
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
}