Ranking methods: Difference between revisions

(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}}==
Anonymous user