Riešenia (skupina B, 12. týždeň)

package sk.upjs.paz;

import java.util.ArrayList;
import java.util.List;

public class UzitocneMetody {

        public static double sucetZoznamu(List<Double> zoznam) {
                if (zoznam == null || zoznam.size() == 0)
                        throw new ZoznamPrazdnyException();

                double sucet = 0;

                for (Double val : zoznam)
                        sucet += val;

                return sucet;
        }

        public static List<Double> poleStringovNaListDoublov(String[] pole) throws NepodariloSaVsetkoSkonvertovatException {
                List<Double> hodnoty = new ArrayList<Double>(pole.length);
                NepodariloSaVsetkoSkonvertovatException vynimka = null;

                for (String s : pole) {
                        try {
                                hodnoty.add(Double.parseDouble(s));
                        } catch (NumberFormatException e) {
                                if (vynimka == null)
                                        vynimka = new NepodariloSaVsetkoSkonvertovatException();

                                vynimka.getNeskonvertovatelneHodnoty().add(s);
                        }
                }

                if (vynimka == null)
                        return hodnoty;
                else
                        throw vynimka;
        }
}
package sk.upjs.paz;

public class ZoznamPrazdnyException extends RuntimeException {

        public ZoznamPrazdnyException() {
                super();
                // TODO Auto-generated constructor stub
        }

        public ZoznamPrazdnyException(String message, Throwable cause) {
                super(message, cause);
                // TODO Auto-generated constructor stub
        }

        public ZoznamPrazdnyException(String message) {
                super(message);
                // TODO Auto-generated constructor stub
        }

        public ZoznamPrazdnyException(Throwable cause) {
                super(cause);
                // TODO Auto-generated constructor stub
        }
}
package sk.upjs.paz;

import java.util.ArrayList;
import java.util.List;

public class NepodariloSaVsetkoSkonvertovatException extends Exception {

        private List<String> neskonvertovatelneHodnoty = new ArrayList<String>();

        public NepodariloSaVsetkoSkonvertovatException() {
                super();
                // TODO Auto-generated constructor stub
        }

        public NepodariloSaVsetkoSkonvertovatException(String message,
                        Throwable cause) {
                super(message, cause);
                // TODO Auto-generated constructor stub
        }

        public NepodariloSaVsetkoSkonvertovatException(String message) {
                super(message);
                // TODO Auto-generated constructor stub
        }

        public NepodariloSaVsetkoSkonvertovatException(Throwable cause) {
                super(cause);
                // TODO Auto-generated constructor stub
        }

        public List<String> getNeskonvertovatelneHodnoty() {
                return neskonvertovatelneHodnoty;
        }
}
package sk.upjs.umv;

import java.util.List;

public class Zlomok implements Comparable<Zlomok> {
        public static final Zlomok JENDA_POLOVICA = new Zlomok(1, 2);

        private long citatel;
        private long menovatel;

        public Zlomok(long citatel, long menovatel) {
                this.citatel = citatel;
                this.menovatel = menovatel;

                normalizuj();
        }

        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + (int) (citatel ^ (citatel >>> 32));
                result = prime * result + (int) (menovatel ^ (menovatel >>> 32));
                return result;
        }

        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                Zlomok other = (Zlomok) obj;
                if (citatel != other.citatel)
                        return false;
                if (menovatel != other.menovatel)
                        return false;
                return true;
        }

        public static Zlomok sucet(List<Zlomok> zlomky) {
                Zlomok vysledok = new Zlomok(1, 1);

                for (Zlomok z : zlomky) {
                        long spolocnyMenovatel = vysledok.menovatel * z.menovatel;
                        long citatel = vysledok.citatel * z.menovatel + z.citatel * vysledok.menovatel;

                        vysledok.citatel = citatel;
                        vysledok.menovatel = spolocnyMenovatel;
                        vysledok.normalizuj();
                }

                // odcitam jednotku, ktoru som mal na zaciatku
                vysledok.citatel -= vysledok.menovatel;
                vysledok.normalizuj();

                return vysledok;
        }

        public long getCitatel() {
                return citatel;
        }

        public long getMenovatel() {
                return menovatel;
        }

        private void normalizuj() {
                long gcd = gcd(citatel, menovatel);
                if (gcd == 0)
                        gcd = 1;

                citatel /= gcd;
                menovatel /= gcd;
        }

        private long gcd(long a, long b) {
                if (a == 0)
                        return b;

                while (b != 0)
                        if (a > b)
                                a = a - b;
                        else
                                b = b - a;

                return a;
        }

        @Override
        public String toString() {
                return citatel + "/" + menovatel;
        }

        @Override
        public int compareTo(Zlomok z) {
                return Long.compare(citatel * z.menovatel, z.citatel * menovatel);
        }
}