2013-11-25 103 views
0

我是新來的java和試圖學習它。我得到這個錯誤。線程「主」異常java.lang.NullPointerException(請幫助我..)

在ödev.Ogrenci.main(Ogrenci.java:145)線程 「main」 顯示java.lang.NullPointerException 異常

這是我的功課。這是關於計算隨機學生的筆記。 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()); 

     } 








} 


} 
+0

哪條線是145線? – Andy

+2

歡迎來到StackOverflow!請不要發佈*全部*您的代碼,請發佈您認爲錯誤的部分。歡迎您包括任何其他*相關*代碼。請同時發佈完整的堆棧跟蹤以及您自己的嘗試來解決問題。 –

+0

'Ogrenci [] Ogt = new Ogrenci [30]; \t \t \t \t \t \t對(INT z = 0的; Z <30; Z ++){ \t \t \t \t \t \t \t \t OGT [Z] PH_1PH_1廣告();'「OGT [Z] PH_1PH_1廣告( );」是行145. – TheNoobEternal

回答

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 ; 

    } 
+0

我犯了一個非常愚蠢的錯誤:)感謝您的幫助。 – TheNoobEternal

+0

@ user3033875這根本不是問題。請考慮增加與我的相匹配的所有其他答案。我們都得出了相同的結論,其他海報應該得到和我一樣多的信用。祝你好運! – mttdbrd

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數字文本,因爲在八進制數表示(除非,當然,這是你的原意)。

+0

非常感謝你,你是一個救星:) – TheNoobEternal

0

您實例Ogt但隨後與任何試圖訪問其內容Ogt[z].ad()填充它之前,裏面什麼也沒有因此NPE

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 ; 

    } 
+0

非常感謝你,你是一個救星:) – TheNoobEternal

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 
} 
相關問題