Xin chỉ sửa lỗi NullPointerException

Mình kiếm đc bài code hay nhưng bị lỗi NullPointerException mình xem nhìu lần mà mà không biết khởi tạo sum với sub như thế nào các bác chì dùm.

public class Vector {

    private int[] v ;
    private int dim;

    public void getVector() {
        Scanner get = new Scanner(System.in);
        System.out.print("Nhap so chieu cua vector: ");
        dim = get.nextInt();
        v = new int[dim];
        for (int i = 0; i < dim; i++) {
            System.out.print("Nhap phan tu thu " + (i + 1));
            System.out.print(": ");
            v[i] = get.nextInt();
        }
    }

    public void showVector() {
        int k = this.dim;
        for(int i = 0; i < k - 1; i++) {
            System.out.print(+v[i]);
            System.out.print(",");
        }
        System.out.print(" "+v[k - 1]);
        System.out.println(")");
        System.out.print("k : "+k);
    }

    public Vector addVector(Vector a) {
        int k = this.dim;
        Vector sum = new Vector();
                for (int i = 0; i < k; i++) {
            sum .v[i ]  = this.v[i] + a.v[i];
        }
        return sum;
    }

    public Vector minusVector(Vector a) {
        int k = this.dim;
        Vector sub = new Vector();
        for (int i = 0; i < k; i++) {
            sub.v[i] += this.v[i] - a.v[i];
        }
        return sub;
    }

    public int multiVector(Vector a) {
        int k = this.dim;
        int multi = 0;
        for (int i = 0; i < k; i++) {
            multi += this.v[i] * a.v[i];
        }
        return multi;
    }

    public boolean check(Vector a) {
        return this.dim == a.dim;
    }

    public int kiemtra(Vector a) {
        if (this.dim == a.dim) {
            return 1;
        } else {
            return 2;
        }
    }

    public static void main(String[] args) {
        Vector v1 = new Vector();
        v1.getVector();
        System.out.print("Vector ssds vua nhap la: ( ");
        v1.showVector();

        Vector v2 = new Vector();
        v2.getVector();
        System.out.print("Vector aaa vua nhap la: (");
        v2.showVector();

        switch (v1.kiemtra(v2)) {
            case 1:
            	Vector v3 = v1.addVector(v2);
                System.out.print("Tong hai vector la: ");
                v3.showVector();

                Vector v4 = v1.minusVector(v2);
                System.out.print("Hieu hai vector la: ");
                v4.showVector();

                int tich = v1.multiVector(v2);
                System.out.println("Tich vo huong hai vector la: " + tich);
                break;

            case 2:
           System.out.println("Khong the thuc hien cac phep toan tren 2 vector khong cung chieu");
                break;
        }
    }
}

Nói rõ là nó null point dòng nào nữa chứ bạn :))

2 Likes
  sum .v[i ]  = this.v[i] + a.v[i];

  sub.v[i] += this.v[i] - a.v[i];

Có hàm dựng khởi tạo đâu mà chả Null.
Chỉ có khởi tạo trong phương thức getVector(). Nhưng đoạn tính toán thì chỉ có gọi hàm dựng mặc định, các trường giá trị chưa được khởi tạo, trong đó có v, thế là ăn hành thôi.

3 Likes

giờ thêm như thế nào :no_mouth: >?

Chưa có thì làm cho có.

2 Likes

Ở dòng này em tạo mới 1 đối tượng Vector, đối tượng vector tạo mới ra sẽ có dim = 0, v = null,
Sau đó dòng này

em lại truy xuất vào v thì nó quăng cho e cái exception NullPointer, giờ em phải khởi tạo sao cho thằng v này nó không null ấy. =))

3 Likes

:expressionless: oài cuối cùng cũng mò ra kết quả
ta phải thêm constructor mới

public Vector(){
}
public Vector(int dim){
this.v =new int[dim];
this.dim =dim;
}

sau đó sửa Vector sum = new Vector(k); trong hàm sum và sub thì mới ra kq
test thử :

Nhap so chieu cua vector: 4
Nhap phan tu thu 1: 1
Nhap phan tu thu 2: 2
Nhap phan tu thu 3: 3
Nhap phan tu thu 4: 4
Vector ssds vua nhap la: ( 1,2,3, 4)
k : 4
Nhap so chieu cua vector: 4
Nhap phan tu thu 1: 5
Nhap phan tu thu 2: 2
Nhap phan tu thu 3: 4
Nhap phan tu thu 4: 1
Vector aaa vua nhap la: (5,2,4, 1)
k : 4
Tong hai vector la: 6,4,7, 5)
k : 4
Hieu hai vector la: -4,0,-1, 3)
k : 4
Tich vo huong hai vector la: 25
:grinning:

Chẳng ai chỉ sai hướng cho bạn. Mọi người đều đang giải thích cho bạn hiểu ĐÂU LÀ ĐÚNG bằng cách giải thích LÝ DO SAI.
Bạn chỉ cần hiểu: “Ồ, thì ra vậy là sai. Mình sẽ làm vầy để nó đúng!”.
Bạn đã hiểu rồi đấy!

5 Likes

Thứ nhất tui chỉ nói cách của bác ý chỉ tui mò ko ra làm tui mò tum lum mới ra cách đúng tui đâu nói cách bác ý sai !! Cái thứ 2 các bác comment trên này đâu phải bác nào chỉ cũng đúng cũng chỉ qua chỉ lại rồi mới ra kết quả .Bác nói thía sau này ai dám cmt . :neutral_face:

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