2016-10-12 7 views
1

Ich weiß, das klingt wie im fragen für einen Löffel zu mir gefüttert werden, aber ich bin wirklich verwirrt und stecken auf die Formulierung mehrere Logiken, aber immer noch nicht finden können, die echte Sache.Analysieren und Vergleichen von 2 Listen

Das Ziel meines derzeitigen Systems ist es, die Noten und Prüfungsergebnisse eines Schülers zu analysieren, um festzustellen, welcher Collegestudent für ihn geeignet ist.

Ich habe fast alle Systemfunktionen mit Ausnahme der Gleichung für diese abgeschlossen.

davon aus, dass

I = Grades Result 
II = Examination Result 

A = Major A 
B = Major B 
C = Major C 

so der Tisch so etwas wie

| A | B | C | 
--------------------- 
I | |  |  | 
--------------------- 
II | |  |  | 

aussehen würde ich brauche um ein Ergebnis zu formulieren, wo ich mehrere mögliche Szenarien einschätzen können, wie:

| A | B | C | 
--------------------- 
I | 1 | 2 | 3 | 
--------------------- 
II | 1 | 3 | 2 | 

in der Tabelle über, hatte Major A einen Rang von beiden 1 auf I und II. Ohne weitere Gleichungen wählt der Schüler also am besten Major A.

und, in:

| A | B | C | 
--------------------- 
I | 1 | 2 | 3 | 
--------------------- 
II | 3 | 2 | 1 | 

Major B hatte einen Rang von beiden 2 auf I und II. So wie das erste Beispiel, in dem der Schüler sowohl I als auch II ein stabiles Ergebnis erhielt, ist der Schüler am besten, Major B auszuwählen.

hier:

| A | B | C | 
--------------------- 
I | 3 | 2 | 1 | 
--------------------- 
II | 3 | 2 | 1 | 

alle drei Majors haben stabile Ergebnisse sowohl in I und II. Aber in Bezug auf das Ranking, Major C hatte die höchste Post, so dass der Student aus Major C auswählen.

und das ist der schwierigste Teil für mich:

| A | B | C | 
--------------------- 
I | 1 | 2 | 3 | 
--------------------- 
II | 2 | 1 | 3 | 

Major C die einzige ist, die ein stabiles Ergebnis Ergebnis hatte. Aber da es Post ist 3, Major C ist aus der Gleichung. und deshalb wird eine Berechnung durchgeführt. Wo:

I = 60% 
II = 40% 

so 

Major A will be ((0.6 x 1) + (0.4 x 2)) = 1.4 
Major B will be ((0.6 x 2) + (0.4 x 1)) = 1.6 

So ist in der Gleichung gegeben, Major A hatte ein höheres Ranking Ergebnis über Major B. So wird der Schüler Major A als Top-Pick für Majors gegeben


Ich bin wirklich wirklich wirklich eine harte Zeit denken an eine Art und Weise, die die Gleichung und die Idee zu einem Code zu übersetzen, wo ich zwei List<> verwendet wird. Eine für I und eine für II.

also, wenn jemand wirklich mich wirklich hier abholen könnte, würde ich es sehr schätzen. Ich habe keine Idee mehr, um mit dieser zu verschonen.danke

ich habe unter Code geschrieben und ich weiß, dass es so hässlich ist, wie es sein kann.

List<Ranking> Rank = new List<Ranking>(); 

// if all results are distinct to each other OR if all results are equal 
if(
    (ExamResult[0].MajorResult != GradeResult[0].MajorResult && ExamResult[1].MajorResult != GradeResult[1].MajorResult && ExamResult[2].MajorResult != GradeResult[2].MajorResult) 
    || 
    (ExamResult[0].MajorResult == GradeResult[0].MajorResult && ExamResult[1].MajorResult == GradeResult[1].MajorResult && ExamResult[2].MajorResult == GradeResult[2].MajorResult) 
) 
{ 
    Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 1).Select(x => x.MajorDescription).Single(), Value = ExamResult.Where(x => x.MajorID == 1).Select(x => x.MajorResult).Single() + GradeResult.Where(x => x.MajorID == 1).Select(x => x.MajorResult).Single() }); 
    Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 2).Select(x => x.MajorDescription).Single(), Value = ExamResult.Where(x => x.MajorID == 2).Select(x => x.MajorResult).Single() + GradeResult.Where(x => x.MajorID == 2).Select(x => x.MajorResult).Single() }); 
    Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 3).Select(x => x.MajorDescription).Single(), Value = ExamResult.Where(x => x.MajorID == 3).Select(x => x.MajorResult).Single() + GradeResult.Where(x => x.MajorID == 3).Select(x => x.MajorResult).Single() }); 
} 

// if one of the three is equal 
if(ExamResult[0].MajorResult == GradeResult[0].MajorResult || ExamResult[1].MajorResult == GradeResult[1].MajorResult || ExamResult[2].MajorResult == GradeResult[2].MajorResult) 
{ 
    var LowestRank1 = ExamResult.OrderBy(x => x.MajorResult).Last(); 
    var LowestRank2 = GradeResult.OrderBy(x => x.MajorResult).Last(); 

    var HighestRank1 = ExamResult.OrderBy(x => x.MajorResult).First(); 
    var HighestRank2 = GradeResult.OrderBy(x => x.MajorResult).First(); 

    if((ExamResult[0].MajorResult == LowestRank1.MajorResult) && (GradeResult[0].MajorResult == LowestRank2.MajorResult)) 
    { 
     Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 2).Select(x => x.MajorDescription).Single(), Value = (ExamResult.Where(x => x.MajorID == 2).Select(x => x.MajorResult).Single() * 0.4) + (GradeResult.Where(x => x.MajorID == 2).Select(x => x.MajorResult).Single() * 0.6) }); 
     Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 3).Select(x => x.MajorDescription).Single(), Value = (ExamResult.Where(x => x.MajorID == 3).Select(x => x.MajorResult).Single() * 0.4) + (GradeResult.Where(x => x.MajorID == 3).Select(x => x.MajorResult).Single() * 0.6) }); 
    } 

    if((ExamResult[1].MajorResult == LowestRank1.MajorResult) && (GradeResult[1].MajorResult == LowestRank2.MajorResult)) 
    { 
     Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 1).Select(x => x.MajorDescription).Single(), Value = (ExamResult.Where(x => x.MajorID == 1).Select(x => x.MajorResult).Single() * 0.4) + (GradeResult.Where(x => x.MajorID == 1).Select(x => x.MajorResult).Single() * 0.6) }); 
     Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 3).Select(x => x.MajorDescription).Single(), Value = (ExamResult.Where(x => x.MajorID == 3).Select(x => x.MajorResult).Single() * 0.4) + (GradeResult.Where(x => x.MajorID == 3).Select(x => x.MajorResult).Single() * 0.6) }); 
    } 

    if((ExamResult[2].MajorResult == LowestRank1.MajorResult) && (GradeResult[2].MajorResult == LowestRank2.MajorResult)) 
    { 
     Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 1).Select(x => x.MajorDescription).Single(), Value = (ExamResult.Where(x => x.MajorID == 1).Select(x => x.MajorResult).Single() * 0.4) + (GradeResult.Where(x => x.MajorID == 1).Select(x => x.MajorResult).Single() * 0.6) }); 
     Rank.Add(new Ranking() { Name = ExamResult.Where(x => x.MajorID == 2).Select(x => x.MajorDescription).Single(), Value = (ExamResult.Where(x => x.MajorID == 2).Select(x => x.MajorResult).Single() * 0.4) + (GradeResult.Where(x => x.MajorID == 2).Select(x => x.MajorResult).Single() * 0.6) }); 
    } 
} 
+0

Im Problem hat nach Ihrer Logik, so dass Sie nur die Formel vergleichen wollen verwenden, wenn der am höchsten eingestuften „stabil“ Kandidat 3s erhalten? Ansonsten sollte stabil instabil sein? –

+0

Ich denke, wenn ich das bestmöglich erklären kann. ist es, den Grad und die Prüfung des Studenten zu ordnen und die Rangordnung der drei Majors zu erhalten, die er nehmen kann. Wobei 1 die beste Wahl und 3 die schlechteste ist – TheQuestioner

+0

Ja, multipliziere jede Punktzahl mit ihrer Skala und wähle dann die niedrigste Punktzahl für den gegebenen Schüler. –

Antwort

1

davon aus, dass

I = Grades Result 
II = Examination Result 

A = Major A 
B = Major B 
C = Major C 

Sie Punkte für jeden großen wie berechnen kann:

((1 << (A.I - 1)) * 0.6) + ((1 << (A.II - 1)) * 0.4) 

das gleiche für große B und C. desto geringer ist die beste.

First table: 
A = 1; 
B = 1.8; 
C = 3.2; 
Second: 
A = 2.2; 
B = 2; 
C = 2.8; 
Third: 
A = 4; 
B = 2; 
C = 1; 
Fourth: 
A = 1.4; 
B = 1.6; 
C = 4; 

funktioniert dies nur, weil Sie sagen, das beste Ergebnis 1. ist, dass Sie nur von 7 auf int und 15 auf int64 verschieben können.

lassen Sie mich wissen, wenn Sie Grade oder Prüfungsergebnisse haben> von 7 oder 15