简体   繁体   English

Java:将其他类的重写方法中的值更改为在该类中计算出的值

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

How can I get the overriden method calculateResult() to work correctly in my StudentTest class? 如何在我的StudentTestStudentTest重写方法calculateResult()正常工作? I need total in calculateResult() to be the total that was calculated in StudentTest from the users input. 我需要totalcalculateResult()total的是在计算StudentTest来自用户的输入。 Or do I have my code for user input in the wrong class? 还是我的用户输入代码在错误的类中?

Student class Student

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 Undergraduate

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 Postgraduate

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 StudentTest

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

It has to do with that your code did not "save" the value for the total. 这与您的代码没有“保存”总计值有关。

I will recommend that 我会建议

  1. you have a int array for examResults 您有一个用于testResults的int数组
  2. and then in your calculateResult method, sum up the total to determine the average 然后在您的calculateResult方法中,对总数求和以确定平均值
  3. be mindful of the integer division issue 注意整数除法问题

Can't understand what you're trying to achieve. 无法理解您要实现的目标。 Are you trying to calculate an average score per student or an average score for all students? 您是要计算每个学生的平均分数还是所有学生的平均分数? You also can't access a variable (total) from outside your class student (and all overriden classes) without having a reference on it. 在没有参考的情况下,您也无法从班级学生(以及所有覆盖的班级)外部访问变量(总计)。

Here what i propose : 这是我的建议:

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
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM