MOI,
teen tehtävää, jossa pitää periä linkitetty lista-luokasta oma luokka ja tehdä siihen operaatio, joka etsii listasta vastaavia alkioita ja palauttaa ensimmäisen vastaavan alkion. Jos listassa ei ole yhtään vastaavuutta, palauttaa operaatio arvon null.
En kuitenkaan ole saanut tehtyä operaatiota oikein. Tässä tämänhetkinen tuotokseni.. Osaisko joku auttaa?
// etsi -operaatio. public Object etsi(Object alkio) { // Käydään listan alkiot läpi. for (int i = 0; i < lista.size()-1; i++) a = lista.get(i); // Jos löytyy vastaavuus. if (a.equals(alkio) == true) return a; else return null; }
Mod. lisäsi kooditagit!
Jos vähän siistin koodiasi, niin huomaat varmaan itsekin virheen:
// etsi -operaatio. public Object etsi(Object alkio) { // Käydään listan alkiot läpi. for (int i = 0; i < lista.size()-1; i++) { a = lista.get(i); } // Jos löytyy vastaavuus. if (a.equals(alkio) == true) { return a; } else { return null; } }
Sinänsä toki on täysin laillista jättää { } pois, jos lohkossa on vain yksi käsky. Mutta juuri tuollaisten virheiden välttämiseksi usein suositellaan käyttämään { } aina for, if, else yms. jälkeen.
Toinen juttu on, että loopissa ei käydä viimeistä alkiota läpi.
Kiitti, oliskohan tässä mitään järkeä?
// etsi -operaatio. public Object etsi(Object alkio) { // Käydään listan alkiot läpi. for (int i = 0; i < lista.size(); i++) { a = lista.get(i); // Jos löytyy vastaavuus. if (a.equals(alkio) == true) a = alkio; break; // Jos ei löydy else a = null; } return a; }
Lisäys:
Mun seuraava ongelma näyttääkin olevan listan täyttäminen. Miksi allaolevalla tavalla listan koko on silti vain 2?
lista.add(0,"O"); lista.add(1,"L"); lista.add(2,"I"); lista.add(3,"O");
Tuossa on edelleen periaatteessa sama ongelma, mikä edellisellä kerrallakin. if koskee vain tuota a=alkio; -riviä eli break ajetaan joka tapauksessa. Eli silmukkaasi ei koskaan ajeta kuin yhden kerran.
Sinänsä olen hieman yllättynyt, jos tuo edes kääntyy eikä valita tuosta irrallisena roikkuvasta elsestä.
Suosittelen että opetteluvaiheessa ihan oikeasti laitat ne aaltosulkeet myös jokaisen if ja else lauseen yhteyteen.
Tuota koko-kysymystäsi en ymmärrä. Tämä koodi antaa tulokseksi 4
public static void main(String args[]) { LinkedList<String> lista = new LinkedList<String>(); lista.add(0,"O"); lista.add(1,"L"); lista.add(2,"I"); lista.add(3,"O"); System.out.println(lista.size()); }
Kiitti, huomasinkin ton aaltosulkeiden uupumisen :)
Kiitos hirveesti näistä vinkeistä, kiva kun joku jaksaa vielä vastailla tämmösiin (toisille) yksinkertaisiin ja tyhmiin kysymyksiin. Oppimisen halu on kova, mutta välillä nää hommat menee yli hilseen :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.