Moni etenkin PHP:tä ja Pythonia käyttänyt ohjelmoija on havainnut, että kyseisissä kielissä on käytössä ns. foreach-rakenne joka mahdollistaa esimerkiksi taulukon alkioiden läpikäymisen. Myös Javasta löytyy tälläinen rakenne, joten ajattelin demonstroida sitä täällä koodivinkkinä jotta ihmiset innostuisivat Javailusta. Koodiesimerkki käy läpi taulukon alkiot läpi ja palautta niiden summan.
EDIT: Alkuehdot metodiin
Summa.java
/*Ohjelma joka laskee taulukon lukujen summan käyttäen *foreach-rakennetta. */ class Summa { public static void main(String[] argh) { int luvut[] = {1,2,3,4,5,6,7,8}; //esimerkkiluvut int summa = summa(luvut); } public static int summa(int[] taulukko) { int tulos=0; //foreach for(int i: taulukko) { tulos+=i; } return tulos; }//end summa(); }//end main();
Kiitos tästä, ei itselle tullut vuoden Javailujenkaan jälkeen tätä rakennetta tietoon. Lisäksi forilla voi olla noita erikoisempia muotoja kuin for(int i=0; i < 10; i++), joista en ole oikein tietoinen, haluaisitko niitäkin lisätä tähän?
Erikoisempia muotoja? Itse en tiedä for-silmukasta muita muotoja kuin nämä kaksi. Tarkoitatko esimerkiksi seuraavan näköistä koodia:
class Kokeilu { public static void main(String argh) { double[] luvut = {1.4,1.41,1.4141}; for(int i=0; luvut.length; System.out.println(luvut[i++])); }
lainaus:
Kiitos tästä, ei itselle tullut vuoden Javailujenkaan jälkeen tätä rakennetta tietoon.
Tuo ominaisuus tuli Javaan vasta uusimmassa eli 1.5 versiossa. Itse en juurikaan tykkää monista noista 1.5 version uusista ominaisuuksista, jotka vievät javaa enemmän c++:n tai pythonin suuntaan, mutta kai niistä joillekin on apua. Itse taidan vielä aika pitkään koodata kaiken java-koodini 1.4:lla lähinnä yhteensopivuus ja muista syistä.
Java 1.5: erityisominaisuuksia
http://java.sun.com/developer/technicalArticles/
lainaus:
Erikoisempia muotoja? Itse en tiedä for-silmukasta muita muotoja kuin nämä kaksi. Tarkoitatko esimerkiksi seuraavan näköistä koodia:
class Kokeilu { public static void main(String argh) { double[] luvut = {1.4,1.41,1.4141}; for(int i=0; luvut.length; System.out.println(luvut[i++])); }
Tuossa on vaan pikku vika, nimittäin for() lauseen keskimmäisessä osassa pitää määritellä ehto, joka määrää jatketaanko looppia. Ehdon siis pitää palauttaa boolean arvo.
Kas, vai on Javaan tullut tuollainen rakenne, hyvä niin. Hyvä koodivinkki. Kritiikkiä sen verran, että koodin sisennyksen voisi laittaa yhtenäiseksi ja johdannossa mainittua tulostusta ei koodissa ole.
Vertailun vuoksi - Pythonissa vastaava toimii näin:
luvut = [1, 2, 3, 4, 5, 6, 7, 8] tulos = 0 for x in luvut: tulos += x
Oikeasti Pythonilla homma hoidettaisiin tietysti näin:
luvut = [1, 2, 3, 4, 5, 6, 7, 8] tulos = sum(luvut)
lainaus:
lainaus:
Erikoisempia muotoja? Itse en tiedä for-silmukasta muita muotoja kuin nämä kaksi. Tarkoitatko esimerkiksi seuraavan näköistä koodia:
class Kokeilu { public static void main(String argh) { double[] luvut = {1.4,1.41,1.4141}; for(int i=0; luvut.length; System.out.println(luvut[i++])); }Tuossa on vaan pikku vika, nimittäin for() lauseen keskimmäisessä osassa pitää määritellä ehto, joka määrää jatketaanko looppia. Ehdon siis pitää palauttaa boolean arvo.
Totta turiset, tuossa on typo ja siinä pitäisi lukea
..... for(int i=0;i < luvut.length;System.out.println(luvut[i++]) ....
Minkä voi tietysti korjata siihen alkuperäiseenkin ;). Tarkoitin erikoisemmilla muodoilla näitä, missä joitakin osia for-lausekkeen ehdoista jätetään tyhjiksi, for(; ; 6) tms. (ja tuo on siis suuntaa antava, luultavasti toimimaton esimerkki asiasta). Jotenkin muistelen sellaisia nähneeni. Suht perustiedolta kuulostaa, mutta ei vain tullut moisiin törmättyä tarkemmin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.