Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Linkitetyn listan alkioiden läpikäyminen

Emmi [26.02.2014 10:53:02]

#

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!

Grez [26.02.2014 11:22:00]

#

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.

Emmi [26.02.2014 11:37:54]

#

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");

Grez [26.02.2014 12:16:58]

#

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());
    }

Emmi [26.02.2014 12:59:09]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta