Hỏi cách khắc phục java.lang.NullPointerException

Hiện tại em muốn tạo 1 biến static như bên dưới. Nhưng khi chạy chương trình thì em chỉ muốn nhập 2 lần thay vì [20] như đã khai báo. Nhưng nếu làm vậy thì nó sẽ bị lỗi java.lang.NullPointerException vì mảng còn lại có giá trị null. Có cách nào khắc phục việc này không ạ.

public class AtomsDemo {
    static Atoms[] atomArray=new Atoms[20];
    public static void enterData() {
        int i=0;
        while(true){
        System.out.println("Enter number:");
        int number= Validation.checkInputInt();                //kiểm tra và gán 
        System.out.println("Enter symbol");
        String symbol= Validation.checkInputString();            //kiểm tra và gán 
        System.out.println("Enter fullname");
        String name=Validation.checkInputString();          //kiểm tra và gán 
        System.out.println("Enter weight");
        float weight=Validation.checkInputFloat();          //kiểm tra và gán 
        atomArray[i]= new Atoms(number, symbol, name, weight);
        i++;
        System.out.print("Do you want to continue (Y/N): ");
        if (!Validation.accept()) {             //xác định muốn tiếp tục nhập hay ngưng
            break;
        }
        }
    }
}

public class Main {

    public static void main(String[] args) {
        enterData();
        for (int i = 0; i < atomArray.length; i++) {
            atomArray[i].display();   //in ra màn hình
        }
        System.out.println("");
    }

}

Nếu bạn thực sự muốn thực hiện trên 1 mảng tĩnh (kích thước cố định): Thêm 1 trường biến đếm vào để đếm số lượng đã nhập. Khi xuất thì lặp theo biến đếm.

Nếu bạn muốn tìm cách khác hay hơn: Dùng các lớp có sẵn của java như ArrayList.

Cách “củ chuối”: Kiểm tra trước khi xuất, nếu gặp null thì ngắt vòng lặp.

1 Like

Bạn muốn nhập có 2 lần, mà ở main bạn lại đòi in hết cả mảng thì bị lỗi java.lang.NullPointerException là đúng rồi. Để khắc phục thì thực hiện cách như Boss ở trên đã nói hoặc là tạo ra một biến static để count cái số lượng thực bạn đã nhập (tiện đường thay thế công tác cho biến i luôn).

public class AtomsDemo {
    static Atoms[] atomArray=new Atoms[20];
    static int count = 0;
    public static void enterData() {
        while(true){
            System.out.println("Enter number:");
            int number= Validation.checkInputInt();                //kiểm tra và gán 
            System.out.println("Enter symbol");
            String symbol= Validation.checkInputString();            //kiểm tra và gán 
            System.out.println("Enter fullname");
            String name=Validation.checkInputString();          //kiểm tra và gán 
            System.out.println("Enter weight");
            float weight=Validation.checkInputFloat();          //kiểm tra và gán 
            atomArray[count]= new Atoms(number, symbol, name, weight);
            count++;
            System.out.print("Do you want to continue (Y/N): ");
            if (!Validation.accept()) {             //xác định muốn tiếp tục nhập hay ngưng
                break;
            }
        }
    }

    public static void main(String[] args) {
        enterData();
        for (int i = 0; i < count; i++) {
            atomArray[i].display();   //in ra màn hình
        }
        System.out.println("");
    }

}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?