Anonymous user
Ranking methods: Difference between revisions
→{{header|Java}}: added Java
(J) |
(→{{header|Java}}: added Java) |
||
Line 293:
│7 │39│Stephen│
└───┴──┴───────┘</lang>
=={{header|Java}}==
<lang java>import java.util.*;
public class RankingMethods {
private enum Tie {
NO, YES, FIRST, LAST
}
private static Tie[] ties;
final static String[] input = {"44 Solomon", "42 Jason", "42 Errol",
"41 Garry", "41 Bernard", "41 Barry", "39 Stephen"};
public static void main(String[] args) {
int n = input.length;
int[] scores = new int[n];
for (int i = 0; i < n; i++)
scores[i] = new Scanner(input[i]).nextInt();
ties = new Tie[n];
Arrays.fill(ties, Tie.NO);
for (int i = 0; i < n; i++) {
boolean eqPrev = i > 0 && scores[i] == scores[i - 1];
boolean eqNext = i < n - 1 && scores[i] == scores[i + 1];
if (!eqPrev && eqNext)
ties[i] = Tie.FIRST;
else if (eqPrev && eqNext)
ties[i] = Tie.YES;
else if (eqPrev && !eqNext)
ties[i] = Tie.LAST;
}
standardRanking(n);
modifiedRanking(n);
denseRanking(n);
ordinalRanking(n);
fractionalRanking(n);
}
private static void standardRanking(int len) {
System.out.println("\nStandard ranking");
for (int i = 0, rank = 1, ord = 1; i < len; i++, ord++) {
if (ties[i] == Tie.NO || ties[i] == Tie.FIRST)
rank = ord;
System.out.printf("%d %s%n", rank, input[i]);
}
}
private static void modifiedRanking(int len) {
System.out.println("\nModified ranking");
for (int i = 0, rank = 1, ord = 0; i < len; i++) {
if (ties[i] == Tie.NO)
rank = ++ord;
else if (ties[i] == Tie.FIRST) {
while (ties[ord] != Tie.LAST)
ord++;
rank = ++ord;
}
System.out.printf("%d %s%n", rank, input[i]);
}
}
private static void denseRanking(int len) {
System.out.println("\nDense ranking");
for (int i = 0, rank = 1; i < len; i++) {
System.out.printf("%d %s%n", rank, input[i]);
if (ties[i] == Tie.NO || ties[i] == Tie.LAST)
rank++;
}
}
private static void ordinalRanking(int len) {
System.out.println("\nOrdinal ranking");
for (int i = 0; i < len; i++)
System.out.printf("%d %s%n", i + 1, input[i]);
}
private static void fractionalRanking(int len) {
System.out.println("\nFractional ranking");
float rank = 0;
for (int i = 0, ord = 0; i < len; i++) {
if (ties[i] == Tie.NO)
rank = ++ord;
else if (ties[i] == Tie.FIRST) {
int orig = ord;
rank = 0;
do {
rank += (++ord);
} while (ties[ord - 1] != Tie.LAST);
rank /= (ord - orig);
}
System.out.printf("%2.1f %s%n", rank, input[i]);
}
}
}</lang>
<pre>Standard ranking
1 44 Solomon
2 42 Jason
2 42 Errol
4 41 Garry
4 41 Bernard
4 41 Barry
7 39 Stephen
Modified ranking
1 44 Solomon
3 42 Jason
3 42 Errol
6 41 Garry
6 41 Bernard
6 41 Barry
7 39 Stephen
Dense ranking
1 44 Solomon
2 42 Jason
2 42 Errol
3 41 Garry
3 41 Bernard
3 41 Barry
4 39 Stephen
Ordinal ranking
1 44 Solomon
2 42 Jason
3 42 Errol
4 41 Garry
5 41 Bernard
6 41 Barry
7 39 Stephen
Fractional ranking
1,0 44 Solomon
2,5 42 Jason
2,5 42 Errol
5,0 41 Garry
5,0 41 Bernard
5,0 41 Barry
7,0 39 Stephen</pre>
=={{header|Python}}==
|