我是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());
}
}
}
答案 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