为什么使用增强的 for 循环时在此程序中出现空指针异常



我在selectAllStudent Method中遇到空指针异常。当我使用 foreach 循环时,但当我使用普通循环时,它工作正常。请解释原因。谢谢

驱动程序类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
    public static void main(String[] args) {
        Student[] sdb = new Student[2];
        try {
            for (Student s : sdb) {
                s = takeInput();
            }
        } catch (IOException ioe) {
            System.err.println(ioe.getMessage());
        }
        selectAllStudent(sdb);
    }
    static void selectAllStudent(Student[] sdb) {
        for (Student s : sdb) {
            s.printStudentDetails();               // Getting NullPOinterException here
        }
    }
    public static Student takeInput() throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the details ");
        System.out.print("ROLL      :"); int rollno = Integer.parseInt(in.readLine());
        System.out.print("NAME      :"); String name = in.readLine();
        System.out.print("BRANCH    :"); String branch = in.readLine();
        return (new Student(rollno,name,branch));
    }  
}

学生班

public class Student {
    private int rollno;
    private String name;
    private String branch;
    Student(int rollno, String name, String branch) {
        this.rollno = rollno;
        this.name = name;
        this.branch = branch;
    }
    void printStudentDetails() {
        System.out.println("ROLLNO  :" + rollno);
        System.out.println("NAME    :" + name);
        System.out.println("BRANCH  :" + branch);
        System.out.println("-------------------");
    }
}

您不会在此for循环中为数组分配新Student

for (Student s : sdb) {
    s = takeInput();
}

takeInput 方法正确返回Student,但您已将其分配给本地引用s,而不是作为数组sdb中的元素。 数组的元素保持nullNullPointerException来自尝试在selectAllStudent方法中调用printStudentDetails null

您可以将增强型for循环转换为标准for循环,为Student分配数组访问表达式。

for (int i = 0; i < sdb.length; i++)
{
    sdb[i] = takeInput();
}

最新更新