Java LinkedList Stack kodundaki hata nedir?

Katılım
11 Eylül 2017
Mesajlar
25.813
Makaleler
42
Çözümler
262
Stack kısmını yazdıdırken hata veriyor, hatam nedir acaba? :)
Kod:
import java.util.Scanner;//klavyeden veri almak için
public class Main {
    public static void main(String[] args) {
        List ogrNo= new List();
        int veri,secim;
        Node e;
        Node etail;
        do {
            System.out.println(" 1-15 arası komutu giriniz:");
            Scanner oku = new Scanner(System.in);//kullanıcıdan değer almak için kütüphane çağrılır
            secim = oku.nextInt();

            switch(secim){
                case 1:
                    System.out.println("Liste Başına eknecek öğrenci numarası giriniz= ");
                    Scanner deger = new Scanner(System.in);//kullanıcıdan değer almak için kütüphane çağrılır
                    veri = deger.nextInt();// veri alınır
                    e = new Node(veri);//node çevrilir
                    ogrNo.listHeadAdd(e);//liste eklenir
                    ogrNo.listPrint();//yazdırma
                    break;

                case 2:
                    System.out.println("Liste Sonuna eknecek öğrenci numarası giriniz= ");
                    Scanner deger2 = new Scanner(System.in);//kullanıcıdan değer almak için kütüphane çağrılır
                    veri = deger2.nextInt();// veri alınır
                    etail = new Node(veri);//node çevrilir
                    ogrNo.listTailAdd(etail);//liste eklenir
                    ogrNo.listPrint();//yazdırma
                    break;
                case 3:
                    System.out.println("Listede aranacak elemanı giriniz= ");
                    Scanner eleman = new Scanner(System.in);//kullanıcıdan değer almak için kütüphane çağrılır
                    veri = eleman.nextInt();// veri alınır
                    int sonuc=ogrNo.listSearch(veri);
                    if(sonuc==-1)
                        System.out.println("Listede "+veri+" bulunamadı!");
                    else
                        System.out.println("Listede aranan"+veri+" sayısı "+sonuc+". sıradadır.");
                    break;                   
                case 4:
                    ogrNo.listHeadDelete();//liste başında bir eleman sil
                    ogrNo.listPrint();//yazdırma
                    break;
                case 5:
                    ogrNo.listTailDelete();//liste sonunda bir eleman sil
                    ogrNo.listPrint();//yazdırma
                    break;
                case 6:
                    ogrNo.listeSondanSil();//liste sonunda bir eleman sil
                    ogrNo.listPrint();//yazdırma
                    break;
                case 7:
                    System.out.println("silinecek elemanı giriniz= ");
                    Scanner sil = new Scanner(System.in);//kullanıcıdan değer almak için kütüphane çağrılır
                    veri = sil.nextInt();// veri alınır
                    int sonuc2=ogrNo.ortadanSil(veri);
                    if(sonuc2==-1)
                        System.out.println("Listede "+veri+" bulunamadı!");
                    else
                        System.out.println("Listede aranan "+sonuc2+". silindi.");
                    ogrNo.listPrint();//yazdırma
                    break;
                    
                case 8:
                    System.out.println("Eklenecek elemanı giriniz= ");
                    Scanner ekle = new Scanner(System.in);//kullanıcıdan değer almak için kütüphane çağrılır
                    veri = ekle.nextInt();// veri alınır
                    e = new Node(veri);//node çevrilir
                    
                    System.out.println(veri+" sayısı kaçıncı sıraya eklensin= ");
                    Scanner sira = new Scanner(System.in);//kullanıcıdan değer almak için kütüphane çağrılır
                    int siraNo = sira.nextInt();// veri alınır
                    
                    ogrNo.ortayaEkle(e,siraNo);
                    ogrNo.listPrint();//yazdırma
                    break;
//--------------------stack--------------------------------               
                case 9:
                    Yigin y= new Yigin();
                    System.out.println("Diziye Eklenecek elemanı giriniz= ");
                    Scanner sayi = new Scanner(System.in);//kullanıcıdan değer almak için kütüphane çağrılır
                    veri = sayi.nextInt();// veri alınır
                    y.push(veri);//diziye ekle
                    //System.out.println("fgfg");
                    y.diziYazdir();//diziyi yazdır.
                    System.out.println("ssss");
                    break;
                default:
                    
                break;
            }
            //oku.close();
        } while (secim!=20);
    }
}

[CODE lang="java" title="yigin"]public class Yigin {
int kapasite=1;
int dizi[];//Yığın elemanları
int p;// eleman sayısı
int max=0;


public Yigin(){//yapıcı yordam
dizi=new int[kapasite];
p=0;
max=0;
}
boolean bosmu(){
if(p==0)
return true;
else
return false;
}
boolean dolumu(){
if(p==dizi.length-1)
return true;
else
return false;
}
int pop(){
if(bosmu())//true olursa dizi boş
return -1;
else{
p--;//çıkardıktan sonra indis 1 azaltılır.
return dizi[p];//elemanı geri döndürür
}
}
void push(int veri){
System.out.println("p nin değeri: "+p);
if(!dolumu()){
//System.out.println("fdddddff");
dizi[p]=veri;//
p++;
System.out.println("p nin değeri: "+p);
}
}
void diziYazdir(){
System.out.println(dizi.length-1);
int count = dizi.length - 1;
for(int i=dizi.length - 2;i<=count;i--){
}

}
}[/CODE]

[CODE title="node"]public class Node {
int data;
Node next=null;

public Node(int data){
this.next = null;
this.data=data;
}
}[/CODE]
 
Son düzenleme:
Birileri yine Java ile veri yapıları öğrenip acı çekiyor galiba. Hemen yardım etmeye çalışıp ben de acı çekeyim.

Main'i yazarken hata olmuş.
Lütfen Türkçe kullanmayın.

Lütfen şu tip fonksiyonları;
Kod:
boolean bosmu() {
    if (p == 0)
        return true;
    else
        return false;
}
şöyle yazın.
Kod:
boolean bosmu() {
    return p == 0;
}
 
İlk paylaşılan kodda List kütüphanesini import etmemişsiniz sanırım.

Ayrıca List objesinin initialize edilmesinde de hata var. Hangi türde objeleri kabul edeceği belirtilmeli. Tıpkı ArrayList tanımındaki gibi.

Kendi compiler'ımdan kontrol ettim java 8 kullanıyorum. List class'ı abstract tanımlanmış default constructor desteklenmez dolayısıyla. İnternetten extend eden class'lara baktım.

1) ArrayList
2) LinkedList
3) Stack

Hepsiyle tek tek denememe rağmen switch kısmında obje referansından çağrılan fonksiyonları bulamadım.

Bu fonksiyonların tanımlarını sizden mi istiyor acaba ?
 
Son düzenleme:
ogrNo.ortadanSil() şeklinde kullanım var. O yüzden List sınıfını sizin yazdığınızı düşündüm. Var olan List veya LinkedList'i mi genişlettiniz?

Birazdan yatacağım. Yarın da ancak akşam 8 gibi müsait olurum. Genel mantığını bilirseniz (ki öğrenmişsinizdir diye düşünüyorum) yazabilirsiniz. Java'da örneklerine internetten bakabilirsiniz. Aldığınız hataların tam olarak nerede olduğunu bulup o aşamada elinizdeki tüm verileri yazdırıp elle inceleyip bile çözebilirsiniz.

Mantık hatası yapmamaya dikkat edin. Bulması da çözmesi de bayağı uğraştırır.
Düşük ihtimal ama hazır generic kütüphaneler kullanıyorsanız her veri tipi için tamamen uygun olmayabiliyor. Onun tespiti adamı kanser eder.
 
Stack kodunuz LinkedList kullanmıyor?

Static Array'i stack gibi kullanmaya çalışıyorsunuz.
Node kullanarak yapmak hem dinamik bir yapı elde etmenizi sağlar hem de referans/pointer olaylarını daha iyi kavramanızı sağlar.

Örnek Stack kodu.
[CODE lang="java" title="MyNode"]public class MyNode<T>
{

private T data;
public MyNode<T> next = null;

private MyNode(T data)
{
this.data = data;
}

T getData()
{
return this.data;
}

public static <T> MyNode<T> factory(T data)
{
return new MyNode<>(data);
}

public static <T> MyNode<T> factory(T data, MyNode<T> next)
{
MyNode<T> node = factory(data);
node.next = next;
return node;
}
}[/CODE]

[CODE lang="java" title="MyStack"]public class MyStack<T>
{

private int maxCapasity = 100;
private int length = 0;
private MyNode<T> head = MyNode.factory(null);

public MyStack()
{
}

public MyStack(T data)
{
push(data);
}

public MyStack(T data, T... dataArray)
{
this(data);
for (T item : dataArray)
{
push(item);
}
}

public int getLength()
{
return this.length;
}

public int push(T data)
{
if (!this.isFull())
{
this.head = MyNode.factory(data, this.head);
return ++this.length;
}
throw new StackSizeException("Stack Full.");
}

public T pop()
{
if (!isEmpty())
{
T data = this.head.getData();
this.head = this.head.next;
this.length--;
return data;
}
throw new StackSizeException("Stack Empty.");
}

public T peek()
{
if (!isEmpty())
{
return this.head.getData();
}
return null;
}

public boolean isEmpty()
{
return this.getLength() == 0;
}

public boolean isFull()
{
return this.getLength() == this.maxCapasity;
}

public int getMaxCapasity()
{
return this.maxCapasity;
}

public void setMaxCapasity(int maxCapasity)
{
if (maxCapasity > 0)
{
this.maxCapasity = maxCapasity;
}
}
}[/CODE]

[CODE lang="java" title="StackSizeException"]public class StackSizeException extends ArrayIndexOutOfBoundsException
{

public StackSizeException(String message)
{
super(message);
}
}
[/CODE]
 
Birileri yine Java ile veri yapıları öğrenip acı çekiyor galiba. Hemen yardım etmeye çalışıp ben de acı çekeyim.

Konudan bağımsız olacak ama atmadan olamazdı:

1636040788517.png
 

Yeni konular

Geri
Yukarı