[]

Kodum neden Çalışmıyor (java Oop)

arkadaşlar bir projemi nesne yönelimli olarak dizayn etmeye çalıştım, daha yeni başlamış olduğumdan bu işlere sürekli sıkıntı alıp duruyorum.

aldığım hata; Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at ogrenci.dongu(ogrenci.java:36)
at MainMethod.main(MainMethod.java:8)

36. satırım;

public void dongu() {
for ( i = 0; i<ogrenci; i++) {
AdEkle();
ad [i] = input.next(); // 36. satırım burası
SoyAdEkle();
soyad [i] = input.next();
Not();
not [i] = input.nextInt();
}
}

büyük ihtimal hatanın kaynaklandığı yer, değişkenler kısmım;

public int ogrenci;
public String[] ad = new String[ogrenci];
public String soyad [] = new String [ogrenci];
public int not [] = new int [ogrenci];
public int i;



tüm class kodum bir arada

import java.util.Scanner;
public class ogrenci {
public int ogrenci;
public String[] ad = new String[ogrenci];
public String soyad [] = new String [ogrenci];
public int not [] = new int [ogrenci];
public int i;


Scanner input = new Scanner (System.in);

public void OgrenciSayisi() {
System.out.println("Öğrenci Sayısını Girin");
ogrenci = input.nextInt();

}

public void AdEkle() {
System.out.println("Öğrencinin Adını Giriniz");

}

public void SoyAdEkle() {
System.out.println("Öğrencinin SoyAdını Giriniz");

}

public void Not() {
System.out.println("Öğrencinin Not Giriniz");

}

public void dongu() {
for ( i = 0; i<ogrenci; i++) {
AdEkle();
ad [i] = input.next();
SoyAdEkle();
soyad [i] = input.next();
Not();
not [i] = input.nextInt();
}
}

public void siralama() {
for (int j = 0; j<not.length; j++) {
for (int k = 0; k < not.length; k++){
if (not[j] < not[k]) {
int buffer = not[j];
not[j] = not[k];
not[k] = buffer;


String buffer1 = ad[j];
ad[j] = ad[k];
ad[k] = buffer1;

buffer1 = soyad[j];
soyad[j] = soyad[k];
soyad[k] = buffer1;

}
}
}
}
public void gosterim () {for (int i = 0; i<ogrenci; i++) {
System.out.println(ad[i] + " " + soyad [i]+ " " + not[i]);
}}


}



main kodum


public class MainMethod {
public static void main(String[] args) {

ogrenci nesne = new ogrenci();
nesne.OgrenciSayisi();

nesne.dongu();
nesne.siralama();
nesne.gosterim();
}
}

 
public int ogrenci;
public String[] ad = new String[ogrenci];
public String soyad [] = new String [ogrenci];
public int not [] = new int [ogrenci];

burada ogrenci adında bir int oluşturmuşsun fakat buna herhangi bir değer atamadan listelerin büyüklüğünü bu değer olarak belirlemişsin. yani yapman gereken öğrenci sayısını aldıktan sonra bu listeleri oluşturmak.

yani bu kısmı şöyle değiştirmelisin:
public int ogrenci;
public String[] ad;
public String soyad [];
public int not [];

öğrenci sayısı fonksiyonu da şöyle olmalı:

public void OgrenciSayisi() {
System.out.println("Öğrenci Sayısını Girin");
ogrenci = input.nextInt();

ad = new String[ogrenci];
soyad = new String [ogrenci];
not = new int [ogrenci];
}

burada yaptığım şey önce öğrenci sayısını alıp daha sonra listeleri bu sayıya göre oluşturmak. başka hata var mı kontrol etmedim, varsa bakabilirim yine.
  • yasli ateist  (13.11.14 22:48:55 ~ 22:50:16) 
ogrenci değişkenine bir değer atamadığın için 0 kabul ediliyor, 0 elmanlı bir array'in de olmayan yerlerine değer atamaya çalıştığın için sana "array'ın dışına çıktın" hatası veriyor. Öğrenciyi tanımladığın yerde bir değer verirsen sıkıntı olmaz.


  • gezegen olan pluton  (14.11.14 07:42:02) 
"@yasli ateist" ve "@gezegen olan pluton" cevabina ek olarak;

"public int ogrenci;" degeri programin maksimum kac ögrenci destekleyecekse o kadar deger olmali. Ama unutma ki "public String[] ad = new String[1000];" gibi bir array yaratirsan, hafizada 1000 ögrencilik alani kullanmasanda ayirir. Java da arraylar dinamik degildir. Dinamik ve kendiliginden büyüyen array yaratmak istersen ilerde mutlaka "ArrayList" konusuna bakmani tavsiye ederim.
  • emrahday  (14.11.14 13:35:59 ~ 13:36:16) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.