Apuja ohjelmointiin» Yleisiä virheitä

Samankaltaiset tiedostot
Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Kääntäjän virheilmoituksia

1. Miten tehdään peliin toinen maila?

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Jypelin käyttöohjeet» Ruutukentän luominen

ITKP102 Ohjelmointi 1 (6 op)

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

ITKP102 Ohjelmointi 1 (6 op)

1. Taustatietoa näppäimistönkuuntelusta

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Sisällys. 15. Lohkot. Lohkot. Lohkot

Pong-peli, vaihe Rajojen tarkistus Yläreunan tarkistus. Muilla kielillä: English Suomi

ITKP102 Ohjelmointi 1 (6 op)

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Sisällys. 16. Lohkot. Lohkot. Lohkot

ITKP102 Ohjelmointi 1 (6 op)

Harjoitus 3 (viikko 39)

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

4. Luokan testaus ja käyttö olion kautta 4.1

5. HelloWorld-ohjelma 5.1

9. Periytyminen Javassa 9.1

Ohjelmoinnin perusteet, syksy 2006

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Jypelin käyttöohjeet» Ruutukentän luominen

1. Omat operaatiot 1.1

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Ohjelmointi 2 / 2010 Välikoe / 26.3

Jypelin käyttöohjeet» Miten lisään ohjaimet peliin

Ohjelmointi 1 C#, kevät 2013,

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

2. Olio-ohjelmoinista lyhyesti 2.1

5. HelloWorld-ohjelma 5.1

FUNKTION KUVAAJAN PIIRTÄMINEN

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Olio-ohjelmointi Javalla

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

7. Oliot ja viitteet 7.1

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Javan perusteita. Janne Käki

Metodien tekeminen Javalla

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

15. Ohjelmoinnin tekniikkaa 15.1

Osoitin ja viittaus C++:ssa

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmoinnin peruskurssi Y1

11/20: Konepelti auki

ASCII-taidetta. Intro: Python

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {

Java-kielen perusteet

Jypelin käyttöohjeet» Miten saan peliin pistelaskurin?

Harjoitus 5 (viikko 41)

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Racket ohjelmointia osa 1. Tiina Partanen Lielahden koulu 2014

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Rajapinta (interface)

Java-kielen perusteet

8. Näppäimistöltä lukeminen 8.1

4. Olio-ohjelmoinista lyhyesti 4.1

19. Olio-ohjelmointia Javalla 19.1

Sisältö. 2. Taulukot. Yleistä. Yleistä

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

12. Javan toistorakenteet 12.1

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

7. Näytölle tulostaminen 7.1

12. Javan toistorakenteet 12.1

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Johdatus ohjelmointiin

2010-luvun kansalaistaito: Windows-puhelimen ohjelmointi. Kai Lindgren, Teollinen tuotanto/metropolia

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Taulukot, silmukat ja muut joka koodin pikku veijarit

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Harjoitus 1 -- Ratkaisut

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Ostolaskujen haku Netvisorista

Transkriptio:

Apuja ohjelmointiin» Yleisiä virheitä Ohjelmaa kirjoittaessasi saattaa Visual Studio ilmoittaa monenlaisista virheistä "punakynällä". Usein tämä johtuu vain siitä, että virheitä näytetään vaikket olisi kerennyt kirjoittaa lausetta loppuun asti. Jos olet kuitenkin kirjoittanut mielestäsi kaiken oikein, mutta virheitä esiintyy edelleen, katso löytyykö virhettä tämän sivun ohjeista. Kun käännät ohjelmaa (Visual Studiossa F6-näppäin) tai yrität ajaa sitä (F5-näppäin), kaikki ohjelmaan jääneet kääntäjän virheet tulevat näkyviin listana ruudun alareunaan. Tuplaklikkaamalla virhetta hyppäät koodissa siihen kohtaan missä virhe esiintyy. Virheitä saattaa näkyä kerralla paljon, mutta ei kannata hätääntyä, sillä usein suuri osa virheistä on seurausta muista virheistä. Tämän vuoksi virheiden korjaaminen kannattaa aloittaa ensimmäisestä virheestä. Muista kuitenkin, että vaikka kaikki käännöksen virheet olisikin korjattu, se ei suinkaan takaa sitä että ohjelma toimisi oikein! Tässä yleisimpiä virheitä. Tyyppiä tai nimiavaruutta ei löydy type or namespace name 'PhysisObject' could not be found (are you missing a using directive or an assembly re Syitä: Oletko kirjoittanut esim. jonkun aliohjelman tai tyypin nimen väärin? Katso sanoja, jotka on väritetty punakynällä. Äskeisessä virheviestissä PhysisObject pitäisi kirjoittaa PhysicsObject. Käytä Visual Studion koodin täydennystä kirjoitusvirheiden välttämiseksi. Jokin kirjasto puuttuu (kts Kirjastojen liittäminen projektiin: wiki,?video) Jokin using-lause puuttuu. Jypeli-pelien projektimalleissa ovat vakiona seuraavat using-lauseet: using System; using Jypeli; using Jypeli.Widgets; using Jypeli.Assets; Peli.Aliohjelma(): not all code paths return a value Aliohjelmalle on määritelty paluuarvo, mutta se ei palauta mitään (eli return-lause puuttuu). Seuraavassa aliohjelmassa paluuarvoksi on määritelty PhysicsObject, mutta aliohjelma ei palauta mitään arvoa. Apuja ohjelmointiin» Yleisiä virheitä 1

Tällöin Visual Studio antaa virheilmoituksen. Jos pallo halutaan palauttaa aliohjelmasta, niin aliohjelmaa pitää korjata seuraavasti. Aliohjelman paluuarvo on void, mutta return palauttaa jotakin Since 'Peli.LuoPallo()' returns void, a return keyword must not be followed by an object expression Tässä aliohjelman LuoPallo paluuarvoksi on määritelty void, mutta siinä yritetään kuitenkin palauttaa arvo: void LuoPallo() PhysicsObject pallo = new PhysicsObject( 50.0, 50.0, Shape.Circle); Jos tässä halutaan palauttaa muuttuja pallo, pitää aliohjelman paluuarvon tyypiksi määritellä pallon tyyppi eli PhysicsObject. PhysicsObject pallo = new PhysicsObject( 50.0, 50.0, Shape.Circle); Muuttujaa ei ole olemassa nykyisessä kontekstissa The name 'massa' does not exist in the current context Seuraavassa koodinpätkässä käytetään muuttujaa nimeltä massa, mutta tuota muuttujaa ei ole esitelty missään. Jokainen muuttuja, jota ohjelmassa käytetään, tulee esitellä jossakin. Esittely tarkoittaa, että jollakin rivillä kirjoitetaan muuttujan tyyppi sekä nimi seuraavasti: Peli.Aliohjelma(): not all code paths return a value 2

double massa; Samalla rivillä esittelyn kanssa voi myös sijoittaa muuttujalle alkuarvon: Niinpä äskeisen koodin virhe voidaan korjata kertomalla muuttujan massa tyyppi (tyyppi on double eli desimaaliluku) siinä missä tuo muuttuja ensimmäisen kerran otetaan käyttöön: Jos muuttuja esitellään aliohjelmassa, se pitää esitellä ennen sen käyttöä. Jos muuttujaa tarvitaan useammassa aliohjelmassa, pitää se esitellä luokan sisällä: double massa; massa = 100.0; PhysicsObject pallo = new PhysicsObject( 50.0, 50.0, Shape.Circle ); TulostaMassa(); void TulostaMassa() MessageDisplay.Add( "Massa on " + massa ); Puolipiste puuttuu C# ja moni muu kieli vaatii puolipisteen (;) jokaisen lauseen loppuun. Visual Studio osaa kertoa, mistä kohtaa koodia puolipiste puuttuu. Alussa puolipisteet unohtuu helposti, mutta niitä kyllä oppii laittamaan. Visual Studiokaan ei ole erehtymätön, ja ehdottaa puolipisteiden laittamista joskus sinne minne se ei kuulu. Esimerkiksi jos olet kirjoittamassa aliohjelman esittelyriviä, niin VS:n mielestä aliohjelman nimen perään kuuluisi puolipiste. Mutta oikeastihan siihen kuuluu kaarisulut, ja sitten aaltosulut. Muuttuja on jo määritelty A local variable named 'massa' is already defined in this scope Muuttujaa ei ole olemassa nykyisessä kontekstissa 3

Muuttuja ei tule esitellä kuin kerran. Jos saman niminen muuttuja on esitelty kahteen kertaan samassa koodilohkossa (esimerkiksi samassa aliohjelmassa), jää epäselväksi kumpaa muuttujaa oikein pitäisi käyttää. Huomaa, että samanniminen muuttuja voi olla määriteltynä eri lohkossa (esimerkiksi luokan sisällä ja aliohjelman sisällä): double massa = 50.0; Kun aliohjelmassa käytetään muuttujaa massa, viittaa se sisemmässä lohkossa määriteltyyn muuttujaan, tässä tapauksessa aliohjelman sisällä määriteltyyn muuttujaan. Tällaista tilannetta tulisi yleensä välttää, sillä silloin tulee helposti viitattua väärään muuttujaan kuin oli tarkoitus. Aaltosulku puuttuu expected Tämä voi johtua siitä, että oikea aaltosulku () on jäänyt kirjoittamatta tai siitä että ennen aaltosulkua on virheellistä koodia. Seuraavassa esimerkissä on kirjoitettu toinen aliohjelma, mutta se onkin lipsahtanut aliohjelman Begin sisälle: double massa = 50.0; void TulostaMassa() Jos sulkumerkkien hahmottaminen tuntuu hankalalta, kannattaa viedä kursori toisen sulkumerkin viereen. Tällöin Visual Studio värittää tämän ja sitä vastaavan sulun. Seuraavassa kuvassa erottuu selvästi Begin-aliohjelman aaltosulut: Muuttuja on jo määritelty 4

Nimiavaruus ei suoraan sisällä attribuutteja tai aliohjelmia A namespace does not directly contain members such as fields or methods C#-kielessä kooditiedostossa on tyypillisesti määritelty nimiavaruus: namespace Peli Ja sen sisällä luokka: namespace Peli Nimiavaruudet ovat hyödyllisiä isommissa projekteissa, mutta tämän kurssin peleissä niitä ei käytetä. Oleellista tässä on se, että C# ei salli aliohjelmien ja muuttujien kirjoittamista suoraan nimiavaruuden sisään, vaan ne tulee kirjoittaa luokan sisään. Seuraavassa esimerkissä aliohjelma on lipsahtanut luokan ulkopuolelle: Kun kursorin vie luokan aloittavan tai lopettavan aaltosulun viereen, Visual Studio esittää nuo aaltosulut eri värillä, jolloin on helpompi kirjoittaa aliohjelma oikeaan kohtaan: Saavuttamatonta koodia havaittu Unreachable code detected Tämä virhe tarkoittaa, että jotkut aliohjelman lauseista eivät voi koskaan tulla suoritettavaksi. Esimerkiksi seuraavassa koodissa pallon x-koordinaattiin sijoitetaan arvo, mutta koska sitä edeltävä lause on return-lause, tuohon lauseeseen ei koskaan päästä. return-lausehan palaa samantien pois aliohjelmasta! Tämä saadaan kuntoon tekemällä tarvittavat sijoitukset ennen paluuta: Nimiavaruus ei suoraan sisällä attribuutteja tai aliohjelmia 5