Herkese merhaba,

Aşağıdaki kodda hasNext ve hasPrevious metodlarının kullanımında sorun yaşıyorum.

Benim bildiklerim hasNext metodu listeyi baştan sona taramakta, hasPrevious ise tam tersini yapmakta.

public class IteratorExample {
  public static void main(String[] args) {
    LinkedList<String> llist = new LinkedList<String>();
        llist.add("A");
        llist.add("B");
        llist.add("C");
        llist.add("D");
        llist.add("E");

        ListIterator<String> litr = llist.listIterator();

        // Buraya hasNext ile tarama yaptığımda hasPrevious metodu da çalışmakta.
        // Ama şu haliyle çalıştırırsam hasPrevious false dönüyor ve tarama yapmıyor.

        while (litr.hasPrevious())
        System.out.println(litr.previous());

  }
}

Burada hasPrevious metodunun false döndürme sebebi nedir? Cevaplarınız için şimdiden teşekkürler.

Not: Çözüm yolu sunmaktansa bunun neden böyle olduğunu açıklarsanız benim için daha yararlı olacaktır.

Ekleme:

ListIterator<String> litr = llist.listIterator(llist.size());

Eğer listIterator metodunda parametre olarak llist.size() gönderilirse ilk sefer de hasPrevious çalışmakta.Yani bu işaretlenen elemanın indeksi mi oluyor? Verilen indekse göre de arkasında ya da önünde eleman olmadığı kontrol ediliyor.Doğru mu anlıyorum?

soruldu: 02 Kas '14, 05:27

loser's gravatar image

loser
2066915
cevap kabul oranı: 40%

kapatıldı: 02 Kas '14, 08:23

Bu soru 02 Kas '14, 08:23 loser tarafından "Bu soru cevaplandı ve bir cevap daha önce kabul edildi" gerekçesiyle kapatıldı.


litr' ilk başta direkt hasPrevious metoduna sokuyorsun ilk indeksin öncesi boş olduğundan false döndürüyor ama litr.next() deyip bir sonraki indexe geçersen ve hasPrevious metodunu çağırırsan A'yı gösterir

      public static void main(String[] args) {
        LinkedList<String> llist = new LinkedList<String>();
            llist.add("A");
            llist.add("B");
            llist.add("C");
            llist.add("D");
            llist.add("E");

            ListIterator<String> litr = llist.listIterator();

            // Buraya hasNext ile tarama yaptığımda hasPrevious metodu da çalışmakta.
            // Ama şu haliyle çalıştırırsam hasPrevious false dönüyor ve tarama yapmıyor.

                 litr.next();//Bir sonraki indekse geçiyor

            while (litr.hasPrevious()){

            System.out.println(litr.previous());//A döndürecektir
            }

      }

}

permanent link

cevaplandı: 02 Kas '14, 06:02

serefAltindal's gravatar image

serefAltindal
1867814
cevap kabul oranı: 25%

İlk indeks derken biraz daha açık anlatabilir misiniz? Neden A döndü? Açıkcası hiçbirşey anlayamadım.

(02 Kas '14, 06:21) loser loser's gravatar image
1

ilk başta bir linkedlist oluşturup a-b-c-d-e diye eklemede bulunmuşsunuz dizi gibi indexi yoktur listelerin linkedlistlerde veriler birbirlerine bağlıdırlar pointer ile şimdi listenizden ilk elemanı döndürecek olursanız llist.getFirst() //A dönücektir ama A'dan öncesi nulldır o yüzden siz hemen litr.hasPrevious() derseniz size false değeri döner

(02 Kas '14, 06:37) serefAltindal serefAltindal's gravatar image

Evet biraz düşününce anlatıklarınızı anladım.Ama sormak istediğim birşey daha var.Soruya ekliyorum.

(02 Kas '14, 07:00) loser loser's gravatar image
1

Hocam teşekkür ederim.En son eklediğim soruyu cevaplamasanız da olur.Anlattıklarınız gayet anlaşılırmış.İyi günler.

(02 Kas '14, 07:14) loser loser's gravatar image
1

llist.size() ile biz listemizin eleman sayısını belirlemiş olduk yaptığın şu işlem:ListIterator<string> litr = llist.listIterator(llist.size()); ile listIterator'e index atamış oldun yani şuan litr llist'enin son elemanını E'yi (a-b-c-d-'E')göstermektedir litr.hasPrevious()'ta bakıyor benden önce var mı var sonra sıralıyor umarım yardımcı olabilmişimdir

(02 Kas '14, 07:44) serefAltindal serefAltindal's gravatar image

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×3
×2

Soruldu: 02 Kas '14, 05:27

Görüntüleme: 435 kez

Son güncelleme: 02 Kas '14, 08:23

powered by BitNami OSQA