76 lines
2.5 KiB
Java
76 lines
2.5 KiB
Java
import java.util.*;
|
|
|
|
public class RankingMethods {
|
|
|
|
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 len = input.length;
|
|
|
|
Map<String, int[]> map = new TreeMap<>((a, b) -> b.compareTo(a));
|
|
for (int i = 0; i < len; i++) {
|
|
String key = input[i].split("\\s+")[0];
|
|
int[] arr;
|
|
if ((arr = map.get(key)) == null)
|
|
arr = new int[]{i, 0};
|
|
arr[1]++;
|
|
map.put(key, arr);
|
|
}
|
|
int[][] groups = map.values().toArray(new int[map.size()][]);
|
|
|
|
standardRanking(len, groups);
|
|
modifiedRanking(len, groups);
|
|
denseRanking(len, groups);
|
|
ordinalRanking(len);
|
|
fractionalRanking(len, groups);
|
|
}
|
|
|
|
private static void standardRanking(int len, int[][] groups) {
|
|
System.out.println("\nStandard ranking");
|
|
for (int i = 0, rank = 0, group = 0; i < len; i++) {
|
|
if (group < groups.length && i == groups[group][0]) {
|
|
rank = i + 1;
|
|
group++;
|
|
}
|
|
System.out.printf("%d %s%n", rank, input[i]);
|
|
}
|
|
}
|
|
|
|
private static void modifiedRanking(int len, int[][] groups) {
|
|
System.out.println("\nModified ranking");
|
|
for (int i = 0, rank = 0, group = 0; i < len; i++) {
|
|
if (group < groups.length && i == groups[group][0])
|
|
rank += groups[group++][1];
|
|
System.out.printf("%d %s%n", rank, input[i]);
|
|
}
|
|
}
|
|
|
|
private static void denseRanking(int len, int[][] groups) {
|
|
System.out.println("\nDense ranking");
|
|
for (int i = 0, rank = 0; i < len; i++) {
|
|
if (rank < groups.length && i == groups[rank][0])
|
|
rank++;
|
|
System.out.printf("%d %s%n", rank, input[i]);
|
|
}
|
|
}
|
|
|
|
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, int[][] groups) {
|
|
System.out.println("\nFractional ranking");
|
|
float rank = 0;
|
|
for (int i = 0, tmp = 0, group = 0; i < len; i++) {
|
|
if (group < groups.length && i == groups[group][0]) {
|
|
tmp += groups[group++][1];
|
|
rank = (i + 1 + tmp) / 2.0F;
|
|
}
|
|
System.out.printf("%2.1f %s%n", rank, input[i]);
|
|
}
|
|
}
|
|
}
|