Hei
Olen yrittänyt säätää monenlaisia merkkijonoviritelmiä Javalla, joissa oleellisena osana on length()-metodin käyttö. Kääntäjä herjaa, ettei tuota metodia löydy. Mistä mahtaa olla kyse? Alla esimerkkikoodi, joka tuottaa kyseisen virheen
//Ohjelma joka laskee kuinka monta 5-kirjaimista nimeä on taulukossa class Ohjelma { public static void main(String[] argh) { int montako=0; String[] nimet = {"Matti","Teppo","Seppo","Kalle"}; for(int i=0; i<nimet.length()-1; i++) { if(nimet[i].length() == 5) { montako++; }//end if }//end for System.out.println(montako); }//end main }//end class
Taulukon length
ei ole metodi. Käsittääkseni se on kieleen sisäänrakennettu juttu, mutta tästä en ole ihan varma.
Ratkaisu on kuitenkin ottaa sen perästä sulut pois, eli ihan vain nimet.length - 1
.
Kiitos ratkaisusta, nyt onnistuu. Eiköhän nämä javan salat ala vähitellen selviämään.
Itseasiassa String-luokassa on metodi length(), joka palauttaa merkkijonon pituuden. Taulukoissa sen sijaan on length-niminen vakio (tai mikä vastaava nyt onkaan), joka sisältää tiedon taulukon pituudesta.
Lisäksi rivi
for(int i=0; i<nimet.length()-1; i++) {
ei käy läpi kaikkia nimet-taulukon alkioita, vaan viimeinen alkio jää käymättä läpi. Tämä johtuu siitä, että taulukon pituus on n-alkiota (edes jonkinlaisen selkeyden vuoksi käytän taulukon pituudesta merkintää n, enkä nimet.length) pitkä (eli indeksit 0 -> n-1), mutta for-silmukan ehtolause (i<n-1) lopettaa taulukon läpikäymisen jo siinä vaiheessa kun i ei ole enää aidosti pienempi kuin n-1. Tässä tapauksessa siis viimeisen läpikäytävän alkion indeksi on n-2.
Aihe on jo aika vanha, joten et voi enää vastata siihen.