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 classTaulukon 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.