2016-03-30 11 views
-1

私は、学生のメリットリストを合計のマークに従って作成するプログラムを作ろうとしています。 2人の生徒の合計得点が同じであれば、異なる科目の個別マークがチェックされます。SuperclassメソッドからSubclassメソッドを呼び出す方法は?

私はスーパークラスメソッドの定義からサブクラスメソッドを呼び出しようとしていますが、エラーが発生しています。

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

40行目は '// set nu'です – Kent

+0

[link](http://pastebin.com/VAeCRX4X)@Kent – shiwchiz

+0

あなたの問題は' Stud_new.mSort(f) 'にあると思います。非静的メソッドで静的呼び出しを実行しようとしています。 – dambros

答えて

0

おそらく、Factory Methodパターン風のソリューションを探しています。詳細についてはGoogleに問い合わせてください。単純に、Studentクラスを抽象クラスにして、抽象的なmSortメソッドを追加して、Stud_newクラスでメソッドを実装してください。次に、Stud_newオブジェクトをインスタンス化する必要があります。

ヒント:

Student stud = new Stud_new(name.length, phy, chem, maths); 

これは完璧な解決策にはほど遠いですが、このソリューションは、あなたが求めて正確に何をしている、あなたはスーパークラスでサブクラスからメソッドを呼び出すことができます:あなたはこのような何かを行うことができます。

+0

大丈夫私はあなたの言うことを得ていると思います! – shiwchiz

0

スーパークラスメソッドからサブクラスメソッドを呼び出すことはできず、間違っています。

これは継承ルールに違反します。

スーパークラスは共通の動作を表しますが、サブクラスはスーパークラスからは見えない特定の動作を持っています。

関連する問題