Nhờ trợ giúp về lỗi Exception in thread "main" java.lang.NullPointerException

giờ em có 2 class gồm:

  • SinhVien.java
package Chappe7;

import java.io.*;


public class SinhVien implements Comparable<SinhVien>{
      private String Hoten;
      private String Ngaysinh;
      private String diaChi;
      private String Email;
      private String SDT;
      private String Mssv;
      
      public SinhVien()
      {
          this.Hoten = "";
          this.Ngaysinh = "";
          this.diaChi = "";
          this.Email = "";
          this.SDT = "";
          this.Mssv = "";
      }
      
      public SinhVien(String Hoten, String Ngaysinh, String diaChi, String Email, String SDT, String Mssv)
      {
          this.Hoten = Hoten;
          this.Ngaysinh = Ngaysinh;
          this.diaChi = diaChi;
          this.Email = Email;
          this.SDT = SDT;
          this.Mssv = Mssv;
      }
      
      public void nhap(BufferedReader reader) throws IOException
      {
          System.out.print("* Họ và tên: ");
          this.Hoten = reader.readLine();
          System.out.print("* Ngày sinh: ");
          this.Ngaysinh = reader.readLine();
          System.out.print("* Địa chỉ của bạn: ");
          this.diaChi = reader.readLine();
          System.out.print("* Email liên lạc của bạn: ");
          this.Email = reader.readLine();
          System.out.print("* Số điện thoại của bạn: ");
          this.SDT = reader.readLine();
          System.out.print("* Mã số sv của bạn: ");
          this.Mssv = reader.readLine();
      }
      
      public void dihoc()
      {
          System.out.println("- Đi học");
      }
      
      public void lambaitapvenha()
      {
          System.out.println("- Làm bài tập");
      }
      
      public void nophocphi()
      {
          System.out.println("- Nộp học phí");
      }
      
      public void Baikiemtra()
      {
          System.out.println("- Làm bài kiểm tra");
      }
      
      public void Diemdanh()
      {
          System.out.println("- Điểm danh");
      }
      
      public String layten() 
      {     
          String ten = "";     
          for (int i = this.Hoten.length()-1; i >= 0; i--)       
              if (this.Hoten.charAt(i) == ' ') break;       
              else ten = this.Hoten.charAt(i) + ten;     
          return ten;   
      }
      
      @Override
      // Phương thức so sánh 2 sinh viên với nhau dựa trên tiêu chí về tên  
      // -1: Tên của sinh viên This đứng trước tên sinh viên That  
      // 0: Tên của sinh viên This giống tên sinh viên That 
      // 1: Tên của sinh viên This đứng sau tên sinh viên That 
      public int compareTo(SinhVien that) 
      {   
          //chuyển thành ký tự chữ hoa thành về chuỗi
          String tendau = this.layten().toUpperCase();
          //chuyển thành ký tự chữ hoa thành về chuỗi
          String tencuoi = that.layten().toUpperCase();    
        if (tendau.length() < tencuoi.length()) 
        {       
                for (int i = 0; i < tendau.length(); i++)         
                    if ((int)tendau.charAt(i) < (int)tencuoi.charAt(i)) return -1;
                        else if ((int)tendau.charAt(i) > (int)tencuoi.charAt(i)) return 1;       
                            return -1; // VD: An < Anh     
        } 
        else if (tendau.length() > tencuoi.length()) 
        {       
          for (int i=0; i < tencuoi.length(); i++)         
              if ((int)tendau.charAt(i) < (int)tencuoi.charAt(i)) return -1;
                else if ((int)tendau.charAt(i) > (int)tencuoi.charAt(i)) return 1;       
                    return 1; // VD: Phuoc > Phu           
        }  return 0;   
    } 
}

và testsinhvien.java

package Chappe7;
import java.io.*;

public class testsinhvien {
    public static void main(String[] args) throws NumberFormatException, IOException, NullPointerException
    {     
       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Nhập vào số lượng sinh viên: ");
            int n = Integer.parseInt(reader.readLine());
            SinhVien[] list = new SinhVien[n];
            int count = 0;
            for (SinhVien sv1: list)
            {
                count++;
                System.out.println("Nhập thông tin cho sinh viên thứ " + count + ": ");
                sv1.nhap(reader);
            }
        System.out.println("==================");     
        System.out.println("* Sắp xếp tăng dần: ");     
        sortASC(list);     
        printArray(list);  
        
        
        System.out.println("==================");     
        System.out.println("S¿p x¿p gi¿m d¿n: ");     
        sortDESC(list);     
        printArray(list);
    }
    
    public static void sortASC(SinhVien[] list) 
    {     
        SinhVien trungGian;   
    for (int i = 0; i < list.length - 1; i++)        
        for (int j = i + 1; j < list.length; j++)         
            if (list[i].compareTo(list[j]) == 1) 
            {           
                trungGian = list[i];           
                list[i] = list[j];           
                list[j] = trungGian;         
            }   
    }
    
    public static void sortDESC(SinhVien[] list) 
    {     
        SinhVien trungGian;     
        for (int i = 0; i < list.length  - 1; i++)        
            for (int j = i + 1 ; j < list.length; j++)          
                if (list[i].compareTo(list[j]) == -1) 
                {           
                    trungGian = list[i];           
                    list[i] = list[j];           
                    list[j] = trungGian;         
                }   
    }
    
    public static void printArray(SinhVien[] list) 
    {     
        for (int i=0; i<list.length; i++)       
            System.out.println("Sinh viên thứ " + (i+1) + ": " + list[i].toString());
    }
}

và khi ouput thì hiện ra:

Nhập vào số lượng sinh viên: 1
Nhập thông tin cho sinh viên thứ 1: 
Exception in thread "main" java.lang.NullPointerException
	at Chappe7.testsinhvien.main(testsinhvien.java:21)
C:\Users\Administrator\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

MONG MỌI NGƯỜI GIÚP EM VỚI Ạ!!!

@@ ủa, bạn có tìm hết nước gg chưa?

Tìm hết rồi mà vẫn chưa có thể chạy đc

NullPointerException bạn biết là lỗi gì không ?

Mình có hiểu nghĩa của nó ở trên gg nhưng vẫn ko đc

đã hiểu ý nghĩa thì sửa đi chứ còn google gì nữa
lỗi này là lỗi khi lập trình code của chính bạn chứ đâu phải do code của người khác lỗi đâu

dòng 21, bấm debug coi lúc chạy cái đó, thì biến gì nó null?

theo như code bạn copy lên đây thì nó là dòng

sortDESC(list); 

lỗi đó là không hợp lý, ở đây chỉ có thể là biến list bị null, mà biến list bị null nó cũng không báo như vậy được
code bạn đưa lên đây là bản đã sửa lại, code không tương ứng với cái lỗi bạn đã đưa ra thì làm sao người khác giúp bạn được

cách đặt câu hỏi của bạn làm mình có cảm giác bạn không có nỗ lực gì trong việc học tập này
ít nhất thì cũng phải chỉ ra/comment/đánh dấu, giải thích dòng đang lỗi là dòng này trong code trên

chỉ với 1 thao tác bấm debug, thì cũng có thể thấy được khi chạy tới cái dòng lỗi (nó đang là dòng 16 của cái code trên này chứ không phải 21) và thấy rằng biến sv1 bị null

thậm chí nếu không biết debug, thì ở cái dòng đó sv1.nhap(reader); cũng chỉ có 2 biến có thể null được
chèn thêm 2 dòng trước đó

                System.out.println(reader == null ? "reader null" : "reader khong null");
                System.out.println(sv1 == null ? "sv1 null" : "sv1 khong null");

nếu bạn không có khả năng làm được tới đó, có lẽ bạn nên xem xét lại chất lượng học tập của bản thân và điều chỉnh lại
nếu bạn tìm ra được biến sv1 ở cái dòng đó đang null, mà bạn vẫn tạo một topic với cái nội dung như thế này thì chắc là nên xem xét lại thái độ xin giúp đỡ của bạn.

nếu có một thái độ tốt thì câu hỏi nó sẽ là:
em/mình thấy được khi chạy tới dòng đó thì biến sv1 bị null, nhưng không hiểu sao lại như vậy, rõ ràng ở trên đã tạo mảng new SinhVien[n]; rồi…
-> khi đó người ta không cần MỞ MÁY TÍNH, QÚET CHUỘT + SCROLL, COPY CODE, TẠO FILE, PASTE VÔ, CHẠY THỬ, NHẬP INPUT, BẤM DEBUG mà chỉ cần “nhìn vào cái dòng lỗi, nhìn thêm ít dòng bên trên là đã có thể hỗ trợ”

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