avoin/avoin23
Huom! TÄMÄ ON AVOIMEN YLIOPISTON SIVU.
Et voi suorittaa kurssia, ellet ole ilmoittautunut täällä.
Ohjelmointi 1, avoin 2023, luento 20
20. luento: ti 7.11.2023 klo 14:15-16:00: Poikkeukset, Delegaatti ja Lambda-lauseke, ohjelman suoritusaika
- Poistot.cs - esimerkki delegaatista ja Lambda-lausekkeesta
- M: 24. Poikkeukset
Idea:
try { // poikkeusalttiit lauseet } catch(Poikkeusluokka p) { // lauseet poikkeuksen sattuessa } finally { // Lauseet jotka tehdään aina }
- TiedostoIsoksi.cs - poikkeus mikäli tiedostoa ei ole.
- Poikkeus.cs - esimerkkissä ComTestissä
#THROWS
, eli ko. testirivin PITÄÄ heittää poikkeus tai testi epäonnistuu jos se ei heitä. Tällä on dokumentoitu käytös noissa kahdessa tapauksessa. - finally
- Maarat.cs - käytiin läpi
- muita nopeustestejä
- Demo 9 G1-2 tehtävän erilaisia ratkaisuvaihtoehtoja ja miten kauan mikäkin veisi suoritusaikaa mm KuvaVertailua.cs
- Luennolle tehdyt koodit versionhallinnassa
- Luennon koodit versionhallinnassa
- 20. luento videona: Osa 1 MP4 alkuperäinen
- luentoseinä
Kertausta: Kasvatusoperaattorit
- ensi ma luento on kertausluento, kannattaa varulta kerrata itselleen etukäteen kurssin perusasioita, niin pärjää sitten paremmin
Speden rautakauppasketsi
Katso ennen luentojen katsomista:
- Speden rautakauppasketsi 1968 (ainakin 4:50-8:10)
Demo 9 vaarallisia poimintoja poistoon
Contains
etsii jaremove
etsii uudelleen (sama olisiIndexOf
):public static List<string> PoistaSanat(List<string> sanat, string poistettava) { do { sanat.Remove(poistettava); } while (sanat.Contains(poistettava)); return sanat; }
varo myös tilannetta jos tarvitisit jonkin indeksin tyyliin:
if (sanat.Contains("kissa")) { paikka = sanat.IndexOf("kissa"); ... }
koska saman saa suoraan:
paikka = sanat.IndexOf("kissa"); if ( paikka >= 0 ) { ... }
forissa indeksin muuttamista muualla kuin itse
for
-rivillä:public static void PoistaSanat(List<string> sanat, string pisin) { int lkm = 0; for (int i = 0; i < sanat.Count; ) { if ( sanat[i] == pisin ) { lkm++; sanat.RemoveAt(i); } else i++; } }
Sitten oli niitä, joissa tehtiin
i--
ja niitä voi pitää vielä huonompana. Jos noin pitää tehdä, niinwhile
olisi selkeämpi.jono käydään läpi liian monesti (\(O(n^2)\)):
public static List<string> PoistaSanat(List<string> sanat, string pisin) { for (int i = 0; i < sanat.Count; i++) { sanat.Remove(pisin); } return sanat; }
osin ok, mutta varo ettet muulloin laita puolipistettä while perään:
public static void PoistaSanat(List<string> sanat, string poistettava) { while (sanat.Remove(poistettava)); }
Lambda-lausekkeet
Poikkeukset
try
{
// poikkeusalttiit lauseet
}
catch(Poikkeusluokka p)
{
// lauseet poikkeuksen sattuessa
}
finally
{
// Lauseet jotka tehdään aina
}
Tiedostot
Jakolaskut, indeksiylitykset yms.
Ohjelman kesto
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.