バブルよりも簡単で効率的なシミュレーション実際の転写産物(複数の被験者+合計スコア)。

おそらく要件:

図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を使用していないということです()。

おすすめ

転載: www.cnblogs.com/ivy-xu/p/12393394.html