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" 总值有关。
我会推荐
- 你有一个 examResults 的 int 数组
- 然后在您的 calculateResult 方法中,求和以确定平均值
- 注意整数除法问题
无法理解您要实现的目标。您是要计算每个学生的平均分数还是所有学生的平均分数?
您也无法在没有引用的情况下从 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
}
如何让覆盖方法 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" 总值有关。
我会推荐
- 你有一个 examResults 的 int 数组
- 然后在您的 calculateResult 方法中,求和以确定平均值
- 注意整数除法问题
无法理解您要实现的目标。您是要计算每个学生的平均分数还是所有学生的平均分数? 您也无法在没有引用的情况下从 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
}