diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/Apurutiinit.java b/src/main/java/fi/utu/tech/ooj/exercise1/Apurutiinit.java index 6c6536253a9ac7490151eeb2e153afc5524b1aa3..44934fe4a268dbf97e037fc37b15725d7958e9ee 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise1/Apurutiinit.java +++ b/src/main/java/fi/utu/tech/ooj/exercise1/Apurutiinit.java @@ -24,7 +24,23 @@ public class Apurutiinit { } public static void luoPalindromi() { - teksti = teksti + new StringBuilder(teksti).reverse().toString().substring(1); + teksti = teksti + new StringBuilder(teksti).reverse().toString().substring(1); } } +/** + * 'kuplaLajittelu' rutiinilla on sivuvaikutus, koska se muuttaa alkuperäistä taulukkoa sen sijaan, että tekisi siitä kopion ja muuttaisi kopiota. + * + * Kuplalajittelu on hyödyllinen silloin kun halutaan muuttujan muuttuvan pysyvästi ja silloin voidaan myös käyttää useampaa rutiinia peräkkäin jolloin alkuperäinen + * muuttujan arvo voidaan muokata millaiseksi tahansa, joka voisi olla hyödyllinen esimerkiksi tiedon suojaamisessa. Kuplalajittelu on haitallinen siinä tapauksessa, jos halutaan säilyttää alkuperäinen taulukko ja esimerkiksi + * käyttää samaa taulukkoa useassa eri rutiinissa. + * + * Koodilla on sivuvaikutuksia, koska 'teksti' muuttujan arvo muuttuu useammassa rutiinissa. + * Sivuvaikutukset mukauttavat jatkuvasti 'teksti' muuttujan arvoa, mikä voi olla hyvä asia siinä tapauksessa, jos halutaan sen muuttuvan. + * Jos useampi henkilö käyttää ohjelmaa samanaikasesti ja suorittaa samat tehtävät täysin samanaikaisesti, niin 'teksti' muuttujan arvon muuttuminen johtaisi vähintääkin virheeseen. + * + * Tässä tapauksessa olisi kannattavampaa vain palauttaa muuttunut teksti ilman, että se muuttaa 'teksti' muuttujaa. + * 'teksti' muuttujan arvoa voidaan muuttaa 'asetaArvot(lkm, teksi)' rutiinilla, mikä johtaa siihen, että luokka on kapseloitu paremmin + * eikä asiakas pääse muuttamaan arvoja mitenkään muuten kuin käyttämällä tätä rutiinia, mikä johtaa vähemmän virhealttiiseen ohjelmaan. + * + */ diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/Main.java b/src/main/java/fi/utu/tech/ooj/exercise1/Main.java index 98be48437e4c946e6c9034a359affc198dbcaafc..8a0f9a8d1a9e1dfb506d85fe9ebe968df6a6ddec 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise1/Main.java +++ b/src/main/java/fi/utu/tech/ooj/exercise1/Main.java @@ -77,7 +77,7 @@ public class Main { * @.post RESULT sisältää kaikki syötteen alkiot ja on järjestetty nousevaan järjestykseen */ public static int[] kuplaLajittelu(int[] inArr) { - int[] outArr = inArr; + int[] outArr = Arrays.copyOf(inArr, inArr.length); int n = outArr.length; int temp = 0; for(int i=0; i < n; i++){ @@ -103,7 +103,7 @@ public class Main { System.out.println("*** Harjoitustyöpohja käynnistyy ***"); /*Kuplalajittelun testaus - * */ + * */ int[] lukuja = {1, 34, 2, 67, 4, 3, 10, 5}; System.out.println(Arrays.toString(kuplaLajittelu(lukuja))); @@ -128,7 +128,10 @@ public class Main { System.out.println(Apurutiinit.getTeksti()); - + + + } } + diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/Opiskelija.java b/src/main/java/fi/utu/tech/ooj/exercise1/Opiskelija.java index 6a87e4f3ab1dfb98a813902445a4634a9e27d158..4b4add7e47869ce20bfe30f2a502ce359e964f9b 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise1/Opiskelija.java +++ b/src/main/java/fi/utu/tech/ooj/exercise1/Opiskelija.java @@ -5,9 +5,8 @@ public class Opiskelija { /* Tehtävä 2A Määrittele luokkainvariantti * * Luokkainvariantti: - * Mikään muuttujista ei saa olla null ja 1900 <= 'syntymavuosi' <= (nykyinen vuosi - 18) - * 'etunimi' eikä 'sukunimi' saa sisältää numeroita - * 'opiskelijanumero' tulee sisältää pelkästään numeroita + * 1900 <= 'syntymavuosi' <= (nykyinen vuosi - 18) + * getEtunimi() != null & getSukunimi() != null & getOpiskelijaNumero() != null */ private String etunimi; private String sukunimi; diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/Tehtava4Vastaukset.txt b/src/main/java/fi/utu/tech/ooj/exercise1/Tehtava4Vastaukset.txt index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..04819e6490651ea771e39441b7be68525b615baf 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise1/Tehtava4Vastaukset.txt +++ b/src/main/java/fi/utu/tech/ooj/exercise1/Tehtava4Vastaukset.txt @@ -0,0 +1,5 @@ +A. Tietueluokka sopisi tähän, koska tiedetään etteivät tiedot muutu ja rivit voidaan helposti esittää tietueina ja niitä voidaan tallentaa listaan niin monta kuin +tarvitaan. + +B. Abstrakti luokkaa voitaisiin käyttää, koska se toimii hyvin pohjana alaluokille ja alaluokat voisivat helposti toteuttaa haluttuja metodeja käyttäen Vaatekokoja. +Tälle abstrakti luokalle voitaisiin helposti myös tehdä staattinen rutiini joka hakee numeerisia kokoja kirjaintunnusten perusteella. \ No newline at end of file diff --git a/src/main/java/fi/utu/tech/ooj/exercise1/VuosiKurssi.java b/src/main/java/fi/utu/tech/ooj/exercise1/VuosiKurssi.java index b86ea05579e90e4d59dca898213bf1352be5cf41..bd3cab292bf84c37a792239f8c44acbe36751c55 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise1/VuosiKurssi.java +++ b/src/main/java/fi/utu/tech/ooj/exercise1/VuosiKurssi.java @@ -7,7 +7,8 @@ public class VuosiKurssi { /* Tehtävä 2A Määrittele luokkainvariantti * * Luokkainvariantti: - * 1920 <= 'kurssinAloitusvuosi' <= nykyinen vuosi, eikä se voi olla null + * 1920 <= 'kurssinAloitusvuosi' <= nykyinen vuosi + * getKurssinAloitusvuosi() != null & getOpiskelijat() != null * 'opiskelijat listan pituus on vähintään 0 ja enintään vuosikurssille sallittu opiskelijoiden määrä esim. 500 */ private int kurssinAloitusvuosi;