Koodauksesta jotain ymmärtäviä paikalla? Alkeet riittää.
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)
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
Etkä oo määritelly salasana Stringiä kuten tehtävänannossa on kuvattu vaan se on hitsattu ohjelmaasi equals vertailun string literaaliksi.
M
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 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
Ja sitten pyritään välttämään break lauseen käyttöä. Tilanteeseen on oikeitakin ratkaisuja olemassa.
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 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ää?
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?
https://2017-ohjelmointi.github.io/
Tuosta linkistä saat varmaan vastauksia kysymyksiisi (siis vastaaja nro 9) ja mun mielestä tehtäviäkin voi selata kirjautumatta.
for i<1000
Printf"Ohjelmointi on paskaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
i=i+1
next
puolipiste
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.
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 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ä.
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.
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 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 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 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
Se sana on nyt paikallinen muuttuja. Siirrä se sulkeiden ulkopuolelle.