diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/teht2/Calculator.java b/src/main/java/fi/utu/tech/ooj/exercise1/teht2/Calculator.java
index 45a7c659ce90c96b365ca6cf600cfdfacbe5fac2..1cdebd8609a875ebe540ceb1ed06679ffad1b2bd 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise1/teht2/Calculator.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise1/teht2/Calculator.java
@@ -1,11 +1,34 @@
 package fi.utu.tech.ooj.exercise1.teht2;
 
+import java.util.ArrayList;
+
 public class Calculator {
+    static String neg = "";
     public static float avg(int[] nums) throws EmptyArrayException {
         int sum = 0;
         if (nums == null || nums.length == 0)
             throw new EmptyArrayException();
-        for(int n: nums) sum += n;
-        return sum / nums.length;
+
+        ArrayList<Integer> kopio = new ArrayList<>();
+
+
+        for (int i=0; i< nums.length ; i++) {
+            if (nums[i] >= 0) {
+                kopio.add(nums[i]);
+            } else {
+                neg = neg + "Antamasi taulukon " + (i+1)
+                        + ". luku " + nums[i] + " on virheellinen \n";
+            }
+        }
+        if (kopio.size() == nums.length) {
+            for (int n : nums) sum += n;
+            return sum / nums.length;
+        } else {
+            return (float) -2.0;
+        }
+
+    }
+    public static void tulostus() {
+        System.out.println(neg);
     }
 }
diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/teht2/EmptyArrayException.java b/src/main/java/fi/utu/tech/ooj/exercise1/teht2/EmptyArrayException.java
index b310525b71d556a9cb71a29c2cde2a962c4cf7e8..b31697f81417917d2f603690a6071716467aa341 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise1/teht2/EmptyArrayException.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise1/teht2/EmptyArrayException.java
@@ -2,4 +2,5 @@ package fi.utu.tech.ooj.exercise1.teht2;
 
 public class EmptyArrayException extends Exception{
 
+
 }
diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/teht2/Teht1.java b/src/main/java/fi/utu/tech/ooj/exercise1/teht2/Teht1.java
index 2dc6408d3cb2773c749731bcc39642581763eb68..48c0a28e431b61b420ff2d0dab24e122d09a1725 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise1/teht2/Teht1.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise1/teht2/Teht1.java
@@ -5,16 +5,19 @@ public class Teht1 {
         //Tulostetaan info-rivi, jotta suoritusta on helpompi seurata
         System.out.println("Suoritetaan Tehtävä 1");
 
-        int[] nums = new int[] {  };
+        int[] nums = new int[] { };
         Float result = -1f;
         try {
             result = Calculator.avg(nums);
+            if (result == -2) {
+                Calculator.tulostus();
+            }
         }
         catch(EmptyArrayException e) {
             System.out.println("Oho, tapahtui hassuja");
         }
 
         //Tulostetaan info-rivi, jotta suoritusta on helpompi seurata
-        System.out.println("Tehtävä 1 suoritus päättyi");
+        System.out.println("Tehtävän 1 suoritus päättyi");
     }
 }
diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/teht3/DensityCalculator.java b/src/main/java/fi/utu/tech/ooj/exercise1/teht3/DensityCalculator.java
index 74212c4e7aa8a4315a441d820279b15cd7eb37fe..0c727b83ef4b8ffba2b261457a441da7df428c46 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise1/teht3/DensityCalculator.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise1/teht3/DensityCalculator.java
@@ -3,8 +3,8 @@ package fi.utu.tech.ooj.exercise1.teht3;
 public class DensityCalculator {
 
     /*
-     * Alkuehto: TODO: määritä tähän alkuehto
-     * Loppuehto: TODO: määritä tähän loppuehto
+     * Alkuehto: massa>0, tilavuus>0
+     * Loppuehto: RESULT=massa/tilavuus ja RESULT > 0
      */
     public static Double laskeTiheys(Double massa, Double tilavuus) {
         return (massa / tilavuus);
@@ -14,15 +14,13 @@ public class DensityCalculator {
     /*
      * Alkuehto: true
      * Loppuehto: palautusarvo on (massa / tilavuus) ja  palautusarvo > 0 ja palautusarvo < 250
-     * Poikkeukset: Nostaa poikkeuksen IllegalArgumentException, jos... [TODO: täydennä ehto]
+     * Poikkeukset: Nostaa poikkeuksen IllegalArgumentException, jos massa tai tilavuus ei-positiivisia tai tiheys on liian suuri.
      */
     public static Double laskeTiheysTotaalisesti(Double massa, Double tilavuus) throws IllegalArgumentException{
-        /*  TODO: Toteuta rutiini niin, että loppuehto pitää paikkansa ja poikkeus nostetaan tarvittaessa.
-            Huom. alla oleva return null on lisätty, jotta harjoitustyöpohja toimii myös
-            ennen kuin tehtävä on tehty.
-        */
 
-        return null;
+        if (massa <= 0 || tilavuus <= 0 || massa/tilavuus >= 250) throw new IllegalArgumentException();
+        return (massa/tilavuus);
+
     }
 
 
diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/teht3/IllegalArgumentException.java b/src/main/java/fi/utu/tech/ooj/exercise1/teht3/IllegalArgumentException.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ad80b23573f88fdb19326ece6cb70d04e44f799
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise1/teht3/IllegalArgumentException.java
@@ -0,0 +1,4 @@
+package fi.utu.tech.ooj.exercise1.teht3;
+
+public class IllegalArgumentException extends Exception{
+}
diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/teht3/Teht2.java b/src/main/java/fi/utu/tech/ooj/exercise1/teht3/Teht2.java
index 0cc58aa173e9511631fb46ef47c1da38c8d0f70c..02af75939a556785603953922db8c51458bb37d4 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise1/teht3/Teht2.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise1/teht3/Teht2.java
@@ -7,10 +7,15 @@ public class Teht2 {
 
         System.out.println("Esimerkkilasku:");
 
-        Double massa = 10.4;
+        Double massa = 1.4;
         Double tilavuus = 2.0;
-        Double tiheys = DensityCalculator.laskeTiheys(massa, tilavuus);
-        System.out.println("Testiajon tulos: massa " + massa + " tilavuus " + tilavuus + " tiheys " + tiheys);
+        try {
+            Double tiheys = DensityCalculator.laskeTiheysTotaalisesti(massa, tilavuus);
+            System.out.println("Testiajon tulos: massa " + massa + " tilavuus " + tilavuus + " tiheys " + tiheys);
+        }
+        catch (IllegalArgumentException e) {
+            System.out.println("Annoit ei-positiivisia tai liian suuria lukuja");
+        }
 
         //Tulostetaan info-rivi, jotta suoritusta on helpompi seurata
         System.out.println("Tehtävä 2 suoritus päättyi");
diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/teht4/Sorter.java b/src/main/java/fi/utu/tech/ooj/exercise1/teht4/Sorter.java
index 66138b1004356c28fcb10bad4f7cc120c5332830..3741411363ba54ac992b6a74cafc637a5303060f 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise1/teht4/Sorter.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise1/teht4/Sorter.java
@@ -14,6 +14,7 @@ public class Sorter {
                 }
     }
 
+
     public static void selectionSort(int[] arr) {
         int n = arr.length;
 
diff --git a/src/test/java/fi/utu/tech/ooj/exercise1/teht4/FactorialTest.java b/src/test/java/fi/utu/tech/ooj/exercise1/teht4/FactorialTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5de321cd523dd37806037352d3e155cccfc5166e
--- /dev/null
+++ b/src/test/java/fi/utu/tech/ooj/exercise1/teht4/FactorialTest.java
@@ -0,0 +1,15 @@
+package fi.utu.tech.ooj.exercise1.teht4;
+// import fi.utu.tech.ooj.exercise1.teht3.IllegalArgumentException;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class FactorialTest {
+
+    @Test
+    void calculateFactorial() {
+        assertEquals(0, Factorial.calculateFactorial(0));
+        assertEquals(4*3*2*1, Factorial.calculateFactorial(4));
+        assertThrows(IllegalArgumentException.class, () -> Factorial.calculateFactorial(-1));
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/fi/utu/tech/ooj/exercise1/teht4/SorterTest.java b/src/test/java/fi/utu/tech/ooj/exercise1/teht4/SorterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..520905c035fc5f2b1d6c90f5f207e25283443501
--- /dev/null
+++ b/src/test/java/fi/utu/tech/ooj/exercise1/teht4/SorterTest.java
@@ -0,0 +1,28 @@
+package fi.utu.tech.ooj.exercise1.teht4;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class SorterTest {
+
+    @Test
+    void bubbleSort() {
+        int[] testi = new int[]{2, 5, 3, 4, 1};
+        int[] oikea = new int[] {5, 4, 3, 2, 1};
+        Sorter.bubbleSort(testi);
+        assertArrayEquals(oikea, testi);
+    }
+    // rutiini on hidas mikäli taulukko on suuri
+
+
+    @Test
+    void selectionSort() {
+        int[] testi = new int[]{2, 5, 3, 4, 1};
+        int[] oikea = new int[] {1, 2, 3, 4, 5};
+        Sorter.selectionSort(testi);
+        assertArrayEquals(oikea, testi);
+    }
+
+    // työläs suuremmilla taulukoilla
+}
\ No newline at end of file