我正在努力制作一个程序,根据他们的总分来准备学生的优秀名单。如果两个学生的总分相同,则检查不同科目的个别分数。
第40行我试图从超类方法的定义中调用子类方法,但我收到错误。
import java.util.*;
class Student{
int[] ph, ch, ma;
int[] total;
int[] total_sort;
Student(){}
// length of array and marks are received via constructor.
Student(int x, int[] p, int[] c, int[] m){
// an array of p,c,m along with 2 arrays of total marks is made.
total = new int[x];
total_sort = new int[x];
ph = new int[x];
ch = new int[x];
ma = new int[x];
for(int i = 0; i < x; i++){
ph[i] = p[i];
ch[i] = c[i];
ma[i] = m[i];
total[i] = (p[i] + c[i] + m[i]);
total_sort[i] = total[i];
}
}
// sorts the array accoring to the total marks
void Sort(){
for(int f = 0; f < total.length; f++){
if(total[f] > total[f+1])
total_sort[f] = total[f];
// checks for higher maths marks.
else if(total[f] == total[f+1]){
int m = Stud_new.mSort(f);
total_sort[f] = total[m];
}
}
}
/* returns the index from original total array so as to identify the students' name.
* marks from sorted array are compared with original array to find the index of marks in originial array .
* this index is used to find the students' name.
*/
int GetList(int a){
for(int j = 0; j < total.length; j++){
if(total[j] == a)
return j;
}
return -1 ;
}
}
class Stud_new extends Student{
int cSort(int ci){
if(ch[ci] > ch[ci + 1])
return ci;
else if(ch[ci] < ch[ci + 1])
return (ci + 1);
//else if(ph[pi] == ph[pi + 1])
//csort(pi);
}
int pSort(int pi){
if(ph[pi] > ph[pi + 1])
return pi;
else if(ph[pi] < ph[pi + 1])
return (pi + 1);
else if(ph[pi] == ph[pi + 1])
return(cSort(pi));
}
int mSort(int mi){
if(ma[mi] > ma[mi + 1])
return mi;
else if(ma[mi] < ma[mi + 1])
return (mi + 1);
// checks higher phy marks
else if(ma[mi] == ma[mi + 1])
return(pSort(mi));
}
}
class Mlist{
public static void main(String args[]){
// initializes the names and marks.
String[] name = {"foo", "bar", "baz"};
int[] phy = {80,112,100};
int[] chem = {100,120,88};
int[] maths = {40, 68,60};
Student stud = new Student(name.length, phy, chem, maths);
System.out.println("Name\tPhysics\tChemistry\tMaths\tName");
// prints the merit list
for(int i = 0; i < name.length; i++){
// index of name is received by a function call
/* STUD.TOTAL_SORT[i] IS STUDENTS' MARKS IN SORTED MANNER.
* THIS IS PASSED AS AN ARGUMENT TO GETLIST METHOD WHICH USES LINEAR SEARCH
* TO FIND THE INDEX IN THE ARRAY OF NAMES FOR THE STUDENT WHOSE MARKS IS PASSES
* THE FUNCTION RETURNS INT WHICH IS THE INDEX FOR NAME[] ARRAY. and others all well.
* HERE STUD.TOTAL_SORT[I] IS AN ARGUMENT TO THE FUNCTION STUD.GETLIST() WHICH RETURNS AN INT
*/
System.out.println(name[stud.GetList(stud.total_sort[i])]+"\t"+phy[stud.GetList(stud.total_sort[i])]+"\t"+chem[stud.GetList(stud.total_sort[i])]+"\t"+maths[stud.GetList(stud.total_sort[i])]+"\t"+stud.total_sort[i]);
}
}
}
答案 0 :(得分:0)
您可能正在寻找Factory方法模式解决方案。请谷歌查看更多详细信息,但简单地说,您希望Student
类是抽象的并添加抽象mSort
方法,然后在Stud_new
类中实现该方法。然后你必须实例化Stud_new
对象。
提示:你可以这样做:
Student stud = new Stud_new(name.length, phy, chem, maths);
这远非完美的解决方案,但是这个解决方案允许您从超类中的子类调用方法,这正是您所要求的。
答案 1 :(得分:0)
从超类方法调用子类方法是不可能的,也是错误的。
这违反了继承规则。
超类表示一种常见行为,而子类具有其超类不可见的特定行为。