Skip to content
Snippets Groups Projects
Commit d59c80e8 authored by Erno Lokkila's avatar Erno Lokkila
Browse files

Lisäkysymys ja tarkennuksia tehtävänantoihin

parent 4096eb75
Branches
No related tags found
No related merge requests found
package kysymykset;
import java.util.Arrays;
import java.util.List;
public class Merkkijonokikkailu {
public static void main(String[] args) {
System.out.println(poistaMerkki(Arrays.asList("abcd","ab","abcd", "abcd", "ab")));
}
/**
* Toteuta metodi poistaMerkki.
* Metodi toimii niin, että jokaisesta merkkijonosta parametrinä annetussa listassa poistetaan yksi merkki.<br>
* Poistettava merkki määräytyy sen mukaan, kuinka monta samanpituista merkkijonoa listassa on. <br>
* Eli jos listassa on kolme 5-merkin pituista merkkijonoa, näistä merkkijonoista poistetaan kolmas merkki.
* Yleisesti: merkkijonosta poistetaan merkki indeksistä min(samanpistuisten merkkijonojen määrä-1, merkkijonon pituus-1).<br>
* Esimerkki: {"abcd","ab","abcd", "abcd", "ab", "ab"} -> {"abd","a","abd", "abd", "a", "a"}
*
* Tämäkin on luonnollisesti mahdollista tehdä käyttämällä vain yhtä puolipistettä metodissa.
*
* @param alkuLista Lista merkkijonoista
* @return uusi lista merkkijonoja, joista poistettu yksi merkki ohjeiden mukaisesti.
*/
public static List<String> poistaMerkki(List<String> alkuLista){
return null;
}
}
...@@ -10,16 +10,15 @@ public class Merkkijonometodi { ...@@ -10,16 +10,15 @@ public class Merkkijonometodi {
} }
/* /**
Ongelma: * Ongelma:
Kirjoita metodi, joka saa parametrinaan listan merkkijonoja ja palauttaa arvon true jos * Kirjoita metodi, joka saa parametrinaan listan merkkijonoja ja palauttaa arvon true jos
Listassa on parillinen määrä alkioita * Listassa on parillinen määrä alkioita
Listan jokainen alkio sisältää merkin ’s’ * Listan jokainen alkio sisältää merkin ’s’
Listassa on <= 3 alkiota, joissa merkki ’k’ * Listassa on <= 3 alkiota, joissa merkki ’k’
Listan jokainen merkkijono alkaa eri merkillä. * Listan jokainen merkkijono alkaa eri merkillä.
*
Jos jokin ylläolevista ehdoista ei täyty, metodi palauttaa false. *Jos jokin ylläolevista ehdoista ei täyty, metodi palauttaa false.
*/ */
public static boolean merkkijonometodi(List<String> lista) { public static boolean merkkijonometodi(List<String> lista) {
return false; return false;
......
...@@ -8,11 +8,20 @@ public class ParillisuusTarkistin { ...@@ -8,11 +8,20 @@ public class ParillisuusTarkistin {
public static void main(String[] args) { public static void main(String[] args) {
List<Double> origList = Arrays.asList(99.9,7.4,234.2,5.9,23.1); List<Double> origList = Arrays.asList(99.9,7.4,234.2,5.9,23.1);
/**
* Tee stream, joka pyöristää desimaaliluvut alaspäin ja jakaa luvut parillisiin ja parittomiin.
*/
//true: parilliset, false: parittomat //true: parilliset, false: parittomat
Map<Boolean, List<Integer>> result = /*tähän joku stream*/ null; Map<Boolean, List<Integer>> result = /*tähän joku stream*/ null;
//"parillinen": parilliset, "pariton":parittomat //"parillinen": parilliset, "pariton":parittomat
Map<String, List<Integer>> result1 = /*tähän joku stream*/ null; Map<String, List<Integer>> result1 = /*tähän joku stream*/ null;
/*Haluttu tulostus alkuperäisellä listalla:
*{false=[5, 7, 23, 99], true=[234]}
*{parillinen=[234], pariton=[5, 7, 23, 99]}
**/
System.out.println(result); System.out.println(result);
System.out.println(result1); System.out.println(result1);
} }
......
package vastaukset;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Merkkijonokikkailu {
public static void main(String[] args) {
System.out.println(poistaMerkki(Arrays.asList("abcd","ab","abcd", "abcd", "ab")));
}
/**
* Toteuta metodi poistaMerkki.
* Metodi toimii niin, että jokaisesta merkkijonosta parametrinä annetussa listassa poistetaan yksi merkki.<br>
* Poistettava merkki määräytyy sen mukaan, kuinka monta samanpituista merkkijonoa listassa on. <br>
* Eli jos listassa on kolme 5-merkin pituista merkkijonoa, näistä merkkijonoista poistetaan kolmas merkki.
* Yleisesti: merkkijonosta poistetaan merkki indeksistä min(samanpistuisten merkkijonojen määrä-1, merkkijonon pituus-1).<br>
* Esimerkki: {"abcd","ab","abcd", "abcd", "ab", "ab"} -> {"abd","a","abd", "abd", "a", "a"}
*
* Tämäkin on luonnollisesti mahdollista tehdä käyttämällä vain yhtä puolipistettä metodissa.
*
* @param alkuLista Lista merkkijonoista
* @return uusi lista merkkijonoja, joista poistettu yksi merkki ohjeiden mukaisesti.
*/
public static List<String> poistaMerkki(List<String> alkuLista){
return alkuLista.stream()
.map(e -> {
long maara = alkuLista.stream()
.filter(e1 -> e1.length()==e.length())
.count();
StringBuilder sb = new StringBuilder(e);
sb.deleteCharAt((int)Math.min(maara-1,e.length()-1));
return sb.toString();
}
/* Tai jos kokee one-linereiden olevan luettavampaa koodia (ei ole)...
* e -> new StringBuilder(e)
* .deleteCharAt(
* (int)Math.min(alkuLista.stream()
* .filter(e1 -> e1.length()==e.length())
* .count(),
* e.length()-1))
* .toString()
**/
)
.collect(Collectors.toList());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment