Ich versuche ein Programm zu erstellen, das eine Liste der Schüler nach ihren Gesamtnoten erstellt. Wenn die Gesamtnote von zwei Schülern gleich ist, werden einzelne Noten verschiedener Fächer geprüft.Wie ruft man eine Subclass-Methode aus einer Superclass-Methode auf?
in Zeile 40 Ich versuche, eine Unterklasse-Methode aus einer Superklassenmethode Definition aufrufen, aber ich bekomme einen Fehler.
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]);
}
}
}
40. Zeile ist '// set nu' – Kent
[Link] (http://pastebin.com/VAeCRX4X) @Kent – shiwchiz
Ich glaube, Ihr Problem ist in' Stud_new.mSort (f) '. Sie versuchen, einen statischen Aufruf auf einer nicht statischen Methode auszuführen. – dambros