Tapahtumat

Kun kirjaudut sisään näet tässä ilmoitukset sinua kiinnostavista asioista.

Kirjaudu sisään

Koodauksesta jotain ymmärtäviä paikalla? Alkeet riittää.

Vierailija
26.04.2017 |

En siis osaa koodata yhtään, mutta omaksi huvikseni aloin käymään läpi Helsingin yliopiston MOOC:ia. Olen nyt päässyt kakkososaan, mutta en kertakaikkiaan tajua mitä mulla on tässä tehtävässä vikana. Voisko joku kertoa? Kyseessä siis tuo punaisella alleviivattu kohta.
(Se loppuosakin on varmaan ihan kökkö, mutta pähkäilen sitä sitten kunhan pääsisin tuosta eteenpäin..)

tehtävänanto: http://aijaa.com/bxaVTv
ja mun vastaus: http://aijaa.com/Of3xcs

Kommentit (21)

Vierailija
1/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Se sana on nyt paikallinen muuttuja. Siirrä se sulkeiden ulkopuolelle.

Vierailija
2/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Sulla on rivillä 13 ylimääränen aaltosulku joka sulkee while (true) blockin. Samalla se sulkee muuttujan sana paikalliseksi kyseisen blockin sisään joten rivillä 14 sen käyttö on scopensa ulkopuolella.

Ja muutenkin sun ohjelma nyt breakkaa heti kun joku kirjoittaa porkkana eikä printtaa tuota onnittelupätkää.

M

Sisältö jatkuu mainoksen alla
Sisältö jatkuu mainoksen alla
Vierailija
3/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Etkä oo määritelly salasana Stringiä kuten tehtävänannossa on kuvattu vaan se on hitsattu ohjelmaasi equals vertailun string literaaliksi.

M

Vierailija
4/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Etkä oo määritelly salasana Stringiä kuten tehtävänannossa on kuvattu vaan se on hitsattu ohjelmaasi equals vertailun string literaaliksi.

M

Tiedän, mutta meni hermot kun en saa sitäkään toimimaan :D 

Siirryn nyt siihen sitten seuraavaksi, samoin tehtävän loppuosaan. Kiitos neuvoista :) 

Vierailija
5/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Vierailija kirjoitti:

Etkä oo määritelly salasana Stringiä kuten tehtävänannossa on kuvattu vaan se on hitsattu ohjelmaasi equals vertailun string literaaliksi.

M

Tiedän, mutta meni hermot kun en saa sitäkään toimimaan :D 

Siirryn nyt siihen sitten seuraavaksi, samoin tehtävän loppuosaan. Kiitos neuvoista :) 

String salasana = "porkkana";

Scanner lukija ...

while (true) {

    System.out...anna salasana;

    String sana = lukija...

    if (sana.equals(salasana)) {

        System.out...yabadabadooo!

        break;

    }

    System.out...väärin!

}

M

Vierailija
6/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Ja sitten pyritään välttämään break lauseen käyttöä. Tilanteeseen on oikeitakin ratkaisuja olemassa.

Sisältö jatkuu mainoksen alla
Vierailija
7/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Hei tsemppiä sulle ap! Aloitin itsekin saman, mutta ekan päivän innostuksen jälkeen en ole saanut jatkettua. Näin tässä usein käy :-( Kymmenen tehtävää sain tehtyä. Ehkä nyt sun esimerkin innoittamana jatkan tuon kanssa. 

Vierailija
8/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Ja sitten pyritään välttämään break lauseen käyttöä. Tilanteeseen on oikeitakin ratkaisuja olemassa.

Ja sitten perustelut mikä vikaa break lauseessa on että sitä pitäisi välttää?

Sisältö jatkuu mainoksen alla
Vierailija
9/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Olen itsekin miettinyt noita kursseja, mutta haluan niistä suoritusmerkinnän jolloin kai pitää noudattaa ennalta annettua aikataulua, eli pitää odottaa että alkaa uusi kurssi. Voiko noita materiaaleja selata ilman että rekisteröityy kurssille? Saako noissa kursseissa apua ja palautetta opettajalta?

Vierailija
10/21 |
26.04.2017 |
Näytä aiemmat lainaukset

https://2017-ohjelmointi.github.io/

Tuosta linkistä saat varmaan vastauksia kysymyksiisi (siis vastaaja nro 9) ja mun mielestä tehtäviäkin voi selata kirjautumatta.

Sisältö jatkuu mainoksen alla
Vierailija
11/21 |
26.04.2017 |
Näytä aiemmat lainaukset

for i<1000

Printf"Ohjelmointi on paskaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

i=i+1

next

puolipiste

Vierailija
12/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Vierailija kirjoitti:

Ja sitten pyritään välttämään break lauseen käyttöä. Tilanteeseen on oikeitakin ratkaisuja olemassa.

Ja sitten perustelut mikä vikaa break lauseessa on että sitä pitäisi välttää?

No ainakin jos käyttää while (true) -silmukkaa, olisi luonnollisinta käyttää lippumuuttujaa, jossa true-arvo muutettaisiin falseksi, koska muuten tuontyyppinen silmukka on täysin turha.

Sisältö jatkuu mainoksen alla
Vierailija
13/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Ap1234512345 kirjoitti:

Vierailija kirjoitti:

Vierailija kirjoitti:

Ja sitten pyritään välttämään break lauseen käyttöä. Tilanteeseen on oikeitakin ratkaisuja olemassa.

Ja sitten perustelut mikä vikaa break lauseessa on että sitä pitäisi välttää?

No ainakin jos käyttää while (true) -silmukkaa, olisi luonnollisinta käyttää lippumuuttujaa, jossa true-arvo muutettaisiin falseksi, koska muuten tuontyyppinen silmukka on täysin turha.

Ei se ole sen luonnollisempaa kuin ikilooppi josta breakkaa. Break on loopin breakkaamista varten, se että sitä käyttää ei voi olla eitoivottavaa.

Joku toinen tekisi do ... while loopin. Saman asian voi tehdä monella tavalla, ja jokaiseen löytyy sormenheristäjä että juuri tämä tapa on se oikeista oikein, vailla juuri muuta perustetta kuin että oma pieru haisee hyvälle muiden pahalle.

Vierailija
14/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Vierailija kirjoitti:

Ja sitten pyritään välttämään break lauseen käyttöä. Tilanteeseen on oikeitakin ratkaisuja olemassa.

Ja sitten perustelut mikä vikaa break lauseessa on että sitä pitäisi välttää?

Niiden käyttö tekee ohjelmasta helposti sekavan ja vaikeammin ymmärrettävän. Toki tämä tulee paremmin esiin vasta sitten, kun ohjelmat ovat isompia.

Jos tarkoituksena on tehdä toistokäsky, jota toistetaan niin kauan kuin jokin ehto on tosi, niin miksi ihmeessä ei kirjoita sitä ehtoa toistokäskyn ehdoksi, vaan kirjoittaa mukamas ikuisen silmukan, josta kuitenkin hypätään jossain vaiheessa pois?

Break-käskyllä on paikkansa joidenkin poikkeustilanteiden ja vastaavien yhteydessä, mutta ihan tavallisen toistokäskyn normaalitilanteen käsittelyssä sen käyttö on huonoa tyyliä.

Sisältö jatkuu mainoksen alla
Vierailija
15/21 |
26.04.2017 |
Näytä aiemmat lainaukset

syntax error

Vierailija
16/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Jos tarkoituksena on tehdä toistokäsky, jota toistetaan niin kauan kuin jokin ehto on tosi, niin miksi ihmeessä ei kirjoita sitä ehtoa toistokäskyn ehdoksi, vaan kirjoittaa mukamas ikuisen silmukan, josta kuitenkin hypätään jossain vaiheessa pois?

Koska tässä pienessä typerässä ohjelmassa while(true) ja break ovat kaikkein helpoin tehdä ilman että alkaa määritellä ja vemputtaa jotain boolean salasanaOnOikea = false; while (salasanaOnOikea == false) {

}muuttujaa.

Vierailija
17/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Oikeita ratkaisuja on monia, tästä niistä yksi. Seuraavassa koko koodi main-metodin sisällä.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String salasana = "porkkana";

String myString;

boolean salasanaOikein = false;

while (!salasanaOikein) {

System.out.println("Anna salasana:");

myString = br.readLine();

if (myString.equals(salasana)) {

System.out.println("Oikein!");

salasanaOikein = true;

System.out.println("Blaa, blaa, blaa, blaa, blaa!");

}

else {

System.out.println("Väärin!");

}

}

Vierailija
18/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Vierailija kirjoitti:

Jos tarkoituksena on tehdä toistokäsky, jota toistetaan niin kauan kuin jokin ehto on tosi, niin miksi ihmeessä ei kirjoita sitä ehtoa toistokäskyn ehdoksi, vaan kirjoittaa mukamas ikuisen silmukan, josta kuitenkin hypätään jossain vaiheessa pois?

Koska tässä pienessä typerässä ohjelmassa while(true) ja break ovat kaikkein helpoin tehdä ilman että alkaa määritellä ja vemputtaa jotain boolean salasanaOnOikea = false; while (salasanaOnOikea == false) {

}muuttujaa.

Käsittääkseni tässä on tarkoitus oppia koodaamista eikä spagetin keittoa. Tuo perustelu voisi toimia tuotantokoodissa kiireessä jos varmasti ei vaikuta lopputulokseen.

Vierailija
19/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Vierailija kirjoitti:

Jos tarkoituksena on tehdä toistokäsky, jota toistetaan niin kauan kuin jokin ehto on tosi, niin miksi ihmeessä ei kirjoita sitä ehtoa toistokäskyn ehdoksi, vaan kirjoittaa mukamas ikuisen silmukan, josta kuitenkin hypätään jossain vaiheessa pois?

Koska tässä pienessä typerässä ohjelmassa while(true) ja break ovat kaikkein helpoin tehdä ilman että alkaa määritellä ja vemputtaa jotain boolean salasanaOnOikea = false; while (salasanaOnOikea == false) {

}muuttujaa.

Ja kumpikohan noista vaihtoehdoista kertoo lukijalle selvemmin, mistä on kysymys? Joo, joutuuhan sitä kirjoittamaan noin 30 kirjainta enemmän, mutta se aika säästyy helposti siinä vaiheessa, kun jonkun toisen pitää ottaa koodista selvää. Eihän se toki näin pienessä ohjelmassa näy, mutta parempi on opetella pieniäkin ohjelmia kirjoittaessa sellainen tyyli, joka toimii myös isompia ohjelmia kirjoittaessa. Silloin se oikea tyyli tulee itsestään selvästi takaraivosta eikä vaadi mitään ylimääräisiä ponnisteluja.

Vierailija
20/21 |
26.04.2017 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Vierailija kirjoitti:

Jos tarkoituksena on tehdä toistokäsky, jota toistetaan niin kauan kuin jokin ehto on tosi, niin miksi ihmeessä ei kirjoita sitä ehtoa toistokäskyn ehdoksi, vaan kirjoittaa mukamas ikuisen silmukan, josta kuitenkin hypätään jossain vaiheessa pois?

Koska tässä pienessä typerässä ohjelmassa while(true) ja break ovat kaikkein helpoin tehdä ilman että alkaa määritellä ja vemputtaa jotain boolean salasanaOnOikea = false; while (salasanaOnOikea == false) {

}muuttujaa.

Ainakaan sinun taitosi eivät oikein vakuuta, jos kirjoitat salasanaOnOikea == false sen sijaan, että kirjoittaisit !salasanaOnOikea