おそらく要件:
図1に示すように、前に立って高い合計スコア。
図2に示すように、同一の合計スコア、上面が高い言語スコア。
図3は、合計スコアにおいて、言語スコアは、等しい上面におけるより高い数学のスコアです。
結果4は、前に立って学生の第一の入力と同じです。
エンティティクラス:
1つの パブリック クラススチューデント{ 2 ストリング名。 3 int型のランク。 4 ダブルcscore、mscore、escore。 5 6 公共学生(文字列名、 ダブル cscore、ダブル mscore、ダブルescore){ 7 この .nameの= 名前。 8 本 .cscore = cscore。 9 この .mscore = mscore。 10 この .escore = escore。 11 12 } 13 14 15 二重和(){ 16 リターン(この .cscore + この .mscore + この.escore)。 17 } 18 19 @Override 20 パブリック文字列のtoString(){ 21 リターン "学生{" + 22 "NAME = '" +名+ '\'' + 23 "ランク= '" +ランク+ '\'' + 24 "cscore =" + cscore + 25 "mscore =" + mscore + 26 "escore =" 「}」。 29 } 30 31 32 公共 ダブルgetCscore(){ 33 リターンcscore。 34 } 35 36 公共 ボイド setCscore(ダブルcscore){ 37 この .cscore = cscore。 38 } 39 40 公共 ダブルgetMscore(){ 41 リターンmscore。 42 } 43 44 公共 ボイド setMscore(ダブルmscore){ 45 この .mscore = mscore。 46 } 47 48 公共の文字列のgetName(){ 49 リターン名。 50 } 51 52 公共の ボイドのsetName(文字列名){ 53 この .nameの= 名前。 54 } 55 56 公共 ダブルgetEscore(){ 57 リターンescore。 58 } 59 60 公共 ボイド setEscore(ダブルescore){ 61 この .escore =escore; 62 } 63 64 公衆 INT getRank(){ 65 リターンランク。 66 } 67 68 公共 ボイド setRank(INT ランク){ 69 この .rank = ランク; 70 } 71 72 }
テストコード:
1 パブリック クラスのテスト{ 2 公共 静的 ボイドメイン(文字列[]引数){ 3 学生[]学生= 新しい生徒[8 ]。 4 学生[0] = 新しい生徒( "学生一"、85、72、95 )。 5 学生[1] = 新しい生徒( "学生二"、87、72、93 )。 6 学生[2] = 新しい生徒( "学生三"、88、73、91 )。 7 学生[3] = 新しい生徒( "学生四"、99、94、56 )。 8 学生[4] =新しい学生( "学生五"、100、100、100 ); 9 学生[5] = 新しい生徒( "学生六"、35、78、83 )。 10 学生[6] = 新しい生徒( "学生七"、87、66、78 )。 11 学生[7] = 新しい生徒( "学生八"、87、66、78 )。 12 13 コンパレータ<学生>コンパレータ= 新しいコンパレータ<学生> (){ 14 @Override 15 公共 のint 比較(スチューデントO1、学生O2){ 16 であれば(o1.sum()== O 2。 もし(o2.getCscore()== o1.getCscore()){ 18 であれば(o2.getMscore()== o1.getMscore()){ 19 リターン(INT)(o2.getEscore() - o1.getEscore() ); 20 } 他{ 21 リターン(INT)(o2.getCscore() - o1.getCscore())。 22 } 23 } 他{ 24 リターン(INT)(o2.getCscore() - o1.getCscore())。 25 } 26 } 他{ 27 リターン(INT)(o2.sum() - o1.sum())。 28 } 29 } 30 }。 31 32 キュー<学生>キュー= 新しい優先度つきキュー<> (比較) 33 のために(スチューデントSTU:学生){ 34 queue.offer(STU)。 35 } 36 37 int型のランク= 1 。 38 一方(queue.peek()!= NULL ){ 39 queue.peek()setRank(ランク)。 40 のSystem.out.println(queue.poll())。 41 ランク++ ; 42 } 43 44 } 45 46 }
結果:
はい、そこの問題は、ある学生は、第7、第8学生にランクされていないということです。参照優先度つきキュー、7学生が入るため、学生八を入力して、キューの特性に応じて、FIFO、学生が第一の出力七べきである、出力後の8人の学生。学生は)(その後、比較、int型優先クラス属性を追加しすぎて、決定されます。もう一つの問題は、私はArrayListのとLinkedListのを使用している場合、ランキングは()にかかわらず、独自のソートの変更、またはCollections.sortを使用していないということです()。