线程“main”中的异常java.lang.NullPointerException(请帮帮我..)

时间:2013-11-25 20:33:24

标签: java eclipse

我是java新手并试图学习它。我收到了这个错误。

  

线程“main”java.lang.NullPointerException中的异常   在ödev.Ogrenci.main(Ogrenci.java:145)

这是我的作业。它是关于计算随机学生的笔记。

PS:我是土耳其语,如果代码中的某些单词对你没有意义,请忽略它。这些话可能是土耳其语。 :)

package ödev;



public class Ogrenci {



public int no;
public String ad;
public String soyad;

private int vize1;
public int getVize1() {
    return vize1;
}
public void setVize1(int vize1) {
    this.vize1 = vize1;
}
public int getVize2() {
    return vize2;
}
public void setVize2(int vize2) {
    this.vize2 = vize2;
}
public int getFinal() {
    return Final;
}
public void setFinal(int final1) {
    Final = final1;
}
private int vize2;
private int Final;

String[] harf = new String[]{"a", "e", "i", "h", "k", "l", "m", "n"};

public Ogrenci(){



    }

public void randomNot(){

    int i1 = (int)(Math.random()*11);

    int i2 = (int)(Math.random()*101);

    int i3 = (int)(Math.random()*11);


    if(i1<8)
        vize1 = (int)(Math.random()*36+65);
    else
        vize1 = (int)(Math.random()*65);

    if(i2<26)
        vize2 = (int)(Math.random()*51+50);
    else
        vize2 = (int)(Math.random()*50);

    if(i3<8)
        Final = (int)(Math.random()*36+65);
    else
        Final = (int)(Math.random()*65);

}



public String ad(){

    String isim = "";

    int a1 = (int)(Math.random()*6);
    int a2 = a1+3;

    for(int i = 0; i<a2; i++){
        int a3 = (int)(Math.random()*8);

        String a = harf[a3];

        isim += a;
        }

    return isim;

    }

public String soyad(){

        String isim = "";

        int a1 = (int)(Math.random()*6);
        int a2 = a1+3;

        for(int i = 0; i<a2; i++){
            int a3 = (int)(Math.random()*8);

            String a = harf[a3];

            isim += a;
            }

        return isim;

        }

public String harfnotu(){

    double ort = (0.3*vize1)+(0.3*vize2)+(0.4*Final);

    if(ort>=0 && ort<50)
        return "FF";
    else if(ort>=50 && ort<55)
        return "DD";
    else if(ort>=55 && ort<60)
        return "DC";
    else if(ort>=60 && ort<70)
        return "CC";
    else if(ort>=70 && ort<75)
        return "CB";
    else if(ort>=75 && ort<85)
        return "BB";
    else if(ort>=85 && ort<90)
        return "BA";
    else if(ort>=90 && ort<=100)
        return "AA";
    else if(ad.equals("hakan"))
        return "FF";

    return "Harf notu hesaplanamamistir.";
}




public static void main(String[] args){


        Ogrenci[] Ogt =  new Ogrenci[30];

        for(int z=0; z<30; z++){

            Ogt[z].ad();
            Ogt[z].soyad();
            Ogt[z].randomNot();
            Ogt[z].no = 0710000 + z ;

        }





        System.out.println("Numara         Ad   Soyad             1.vize -- 2.vize -- Final -- Harf Notu");

        for(int k = 0; k<30; k++){

            System.out.println(Ogt[k].no+" "+Ogt[k].ad()+" "+Ogt[k].soyad()+" "+Ogt[k].vize1+" "+Ogt[k].vize2+" "+Ogt[k].Final+" "+Ogt[k].harfnotu());

        }








}


}

5 个答案:

答案 0 :(得分:2)

main中,你有这个块:

Ogrenci[] Ogt =  new Ogrenci[30];

    for(int z=0; z<30; z++){

        Ogt[z].ad();
        Ogt[z].soyad();
        Ogt[z].randomNot();
        Ogt[z].no = 0710000 + z ;

    }

您声明了数组,但数组已初始化为所有null。在访问之前创建Ogrenci个对象:

for(int z=0; z<30; z++){
    Ogt[z] = new Ogrenci();
    // Then call methods on it here.

顺便提一下,请注意以0开头的数字文字,因为它表示八进制数字(当然,除非你的意思是这样)。

答案 1 :(得分:2)

问题在于你的主要功能:

Ogrenci[] Ogt =  new Ogrenci[30];

    for(int z=0; z<30; z++){

        Ogt[z].ad();
        Ogt[z].soyad();
        Ogt[z].randomNot();
        Ogt[z].no = 0710000 + z ;

    }

您已宣布有30个Ogrenci,但您没有初始化其中任何一个。

使用:

   Ogrenci[] Ogt =  new Ogrenci[30];

    for(int z=0; z<30; z++){
        Ogt[z] = new Ogrenci();

        Ogt[z].ad();
        Ogt[z].soyad();
        Ogt[z].randomNot();
        Ogt[z].no = 0710000 + z ;

    }

答案 2 :(得分:2)

您没有初始化任何Ogrenci对象,只是分配了它们的数组。在初始化它们之前它们都是空的。这应该解决它:

    Ogrenci[] Ogt =  new Ogrenci[30];

    for(int z=0; z<30; z++){
        Ogt[z] = new Ogrenci();
        Ogt[z].ad();
        Ogt[z].soyad();
        Ogt[z].randomNot();
        Ogt[z].no = 0710000 + z ;

    }

答案 3 :(得分:1)

Ogrenci[] Ogt =  new Ogrenci[30];

使用上面的语句,您刚刚声明了一个可以包含Ogrenci实例的数组,其中任何元素ogt[i]都是Ogrenci的实例并初始化为null 。在使用new访问数组之前,您必须创建数组的每个元素。

for(int z=0; z < Ogt.length; z++) //<--- don't use numerical value directly(30) 
                                 //while visiting whole array
{
    Ogt[z] = new Ogrenci();
    // other relevant code
}

答案 4 :(得分:0)

你实例化Ogt但是在用任何试图访问它的内容Ogt[z].ad()填充它之前,因此内部没有任何内容NPE