Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package company;
- import com.sun.source.tree.Tree;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.*;
- import java.util.stream.IntStream;
- /**
- * January 2016 Exam problem 1
- */
- public class StudentRecordsTest {
- public static void main(String[] args) {
- System.out.println("=== READING RECORDS ===");
- StudentRecords studentRecords = new StudentRecords();
- int total = studentRecords.readRecords(System.in);
- System.out.printf("Total records: %d\n", total);
- System.out.println("=== WRITING TABLE ===");
- studentRecords.writeTable(System.out);
- System.out.println("=== WRITING DISTRIBUTION ===");
- studentRecords.writeDistribution(System.out);
- }
- }
- class Student{
- private String ime;
- private String nasoka;
- private int []oceni;
- public Student(String code, String typeOfStudeis, int []oceni) {
- this.ime = code;
- this.nasoka = typeOfStudeis;
- this.oceni = oceni;
- }
- public String getIme() {
- return ime;
- }
- public String getNasoka() {
- return nasoka;
- }
- public double getAverages() {
- return (oceni[0]*6+oceni[1]*7+oceni[2]*8+oceni[3]*9+oceni[4]*10)/(double)(oceni[0]+oceni[1]+oceni[2]+oceni[3]+oceni[4]);
- }
- @Override
- public String toString() {
- return String.format("%s %.2f",ime,getAverages());
- }
- }
- class Nasoka{
- String name;
- HashMap<Integer,Integer> oceni;
- public Nasoka(String name,int niza[]) {
- this.name = name;
- oceni=new HashMap<>();
- oceni.put(6,niza[0]);
- oceni.put(7,niza[1]);
- oceni.put(8,niza[2]);
- oceni.put(9,niza[3]);
- oceni.put(10,niza[4]);
- }
- public String getName() {
- return name;
- }
- public void add(int ocenki[]){
- int tmp=oceni.get(6);
- oceni.replace(6,tmp,tmp+ocenki[0]);
- tmp=oceni.get(7);
- oceni.put(7,tmp+ocenki[1]);
- tmp=oceni.get(8);
- oceni.put(8,tmp+ocenki[2]);
- tmp=oceni.get(9);
- oceni.put(9,tmp+ocenki[3]);
- tmp=oceni.get(10);
- oceni.put(10,tmp+ocenki[4]);
- }
- int getDesetki(){
- return oceni.get(10);
- }
- @Override
- public String toString() {
- StringBuilder sb=new StringBuilder();
- sb.append(name).append("\n");
- IntStream.range(6,11).forEach(x->{
- sb.append(String.format("%2d | ",x));
- for (int i=0;i<oceni.get(x);i+=10){ sb.append("*");}
- sb.append(String.format("(%d)\n",oceni.get(x)));
- });
- return sb.toString();
- }
- }
- class StudentRecords{
- TreeMap<String, TreeSet<Student>> tabela1;
- HashMap<String,Nasoka> tabela3;
- public StudentRecords() {
- tabela1=new TreeMap<>();
- tabela3=new HashMap<>();
- }
- int readRecords(InputStream inputStream){
- int br=0;
- Scanner sc =new Scanner(inputStream);
- String line=null;
- while (!(line=sc.nextLine()).equals("")){
- String part[]=line.split("\\s+");
- String name=part[0];
- String nasoka=part[1];
- int[] oceni=new int[5];
- for (int i = 2; i <part.length ; i++) {
- if(part[i].equals("6")){
- oceni[0]++;
- }
- else if(part[i].equals("7")){
- oceni[1]++;
- }
- else if(part[i].equals("8")){
- oceni[2]++;
- }
- else if(part[i].equals("9")){
- oceni[3]++;
- }
- else if(part[i].equals("10")){
- oceni[4]++;
- }
- }
- br++;
- tabela1.computeIfAbsent(nasoka,x->new TreeSet<>(Comparator.comparing(Student::getAverages).thenComparing(Student::getIme).reversed())).add(new Student(name,nasoka,oceni));
- if(tabela3.get(nasoka)==null){
- tabela3.put(nasoka,new Nasoka(nasoka,oceni));
- }else{
- tabela3.get(nasoka).add(oceni);
- }
- }
- return br;
- }
- void writeDistribution(OutputStream outputStream){
- tabela3.values().stream().sorted(Comparator.comparing(Nasoka::getDesetki).thenComparing(Nasoka::getName).reversed()).forEach(System.out::print);
- }
- void writeTable(OutputStream outputStream){
- tabela1.entrySet().stream().forEach(x->{
- System.out.println(x.getKey());
- x.getValue().stream().forEach(System.out::println);
- });
- }
- }
- //Masala masala kasala
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement