30/09/2018, 18:18

Add một Object vào ArrayList Java

em có đoạn code này khi em add vào arraylist thì khi output nó là giá trị null là sao ạ.
tức là trong mảng không có gì ý

public class Student {
    public static ArrayList<Student> arrStudent;
	private String ma, ten, nganh, lop;
	public void setId(String ma1){
		this.ma=ma1;
	}
	public void setName(String ten1){
		this.ten=ten1;
	}
	public void setNganh(String nganh1){
		this.nganh=nganh1;
	}
	public void setLop(String lop1){
		this.lop=lop1;
	}
	public String getId(){
		return this.ma;
	}
	public String getName(){
		return this.ten;
	}
	public String getNganh(){
		return this.nganh;
	}
	public String getLop(){
		return this.lop;
	}
	public Student(String id,String name,String nganh,String lop){
		this.ma=id;
		this.ten=name;
		this.nganh=nganh;
		this.lop=lop;
		
	}
	public static void setSv(){
            
           
		System.out.println("Nhap thong tin sinh vien");
		Scanner nhap=new Scanner(System.in);
		System.out.println("Nhap ma sinh vien:");
		String id=nhap.nextLine();
		System.out.println("Nhap ten sinh vien:");
		String name=nhap.nextLine();
		 System.out.println("Nhap nganh sinh vien:");
		String nganh1 =nhap.nextLine();
		System.out.println("Nhap lop sinh vien:");
		String lop1 =nhap.nextLine();
		arrStudent=new ArrayList<Student>();
                Student s=new Student(id,name,nganh1,lop1);
                arrStudent.add(s);
            
	}
	public static void viewSv(){
		System.out.println("Xem thong tin sinh vien: ");
		for(int i=0;i<arrStudent.size();i++){
		System.out.println(arrStudent.get(i));
		}
	}
	public Student(){
		super();
	}

và đoạn này để chạy

public class JavaApplication1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       Student a=new Student();
       a.setSv();
       a.viewSv();
    }
    
}
nghiatdph03905 viết 20:23 ngày 30/09/2018

output của nó là

Nhap thong tin sinh vien
Nhap ma sinh vien:
1
Nhap ten sinh vien:
ád
Nhap nganh sinh vien:
fad
Nhap lop sinh vien:
à
Xem thong tin sinh vien: 
javaapplication1.Student@33909752
Le Tran Phuong viết 20:34 ngày 30/09/2018

hi bạn,
Bên dưới là code mình sửa lại (theo phong cách của bạn) để nó chạy theo ý muốn.
Của bạn không ra kết quả vì một số điểm sau:

  • Bạn dùng Scanner chung cho cả 4 lần nhập, điều này không đúng. Bạn cần khởi tạo object Scanner cho mỗi lần nhập nextLine(). Mình nghĩ bạn nên viết 1 cái class static để gọi thằng này đỡ khởi tạo nhiều lần.

  • Phần đưa data vào trong mảng, bạn dùng một constructor Student với 4 tham số và phương thức add() của Arraylist. Nhưng constructor 4 tham số nó không có ý nghĩa gì cả. Vấn đề là bạn đưa anh s (1 student) vào Arraylist nhưng anh student này chưa có giá trị gì, vì 4 hàm setName, setId, setNganh, setLop chưa được sử dụng. Mình nghĩ ở đây bạn bị nhầm cái constructor 4 tham số kia nghĩa là truyền giá trị vào cho a Student s… cái này không đúng nhé. Bạn phải dùng setter như mình.

  • Khi xuất output, bạn dùng for get(i), đương nhiên nó không hiểu get(i) là get cái gì ra rồi. Các bước nên như sau:

    • Đưa hết toàn bộ data vào 1 Iterator ( cái này sẽ đụng đến khi bạn học đồng bộ hoá, đa luồng nên mình cứ viết tạm vào đây)
    • Trong khi cứ còn giá trị trong Iterator thì còn làm tiếp. Bạn cần nhớ, trong mảng Arraylist của bạn bây giờ là Object, mỗi object có các thuộc tính (trong trường hợp của bạn Student là object, name, id, nganh,lop là các thuộc tính.), bạn không for get(i) được.
      +Vì trong Iterator là các object nên bạn khởi tạo đối tượng Object chứa nó, và kiểm tra xem object đó có phải là Student không, vì ngoài Student, tương lai bạn còn phải chứa các Object khác trong một mảng arraylist.
    • Và cuối cùng dùng các method getter để in ra kết quả

Hi vọng giải đáp được thắc mắc của bạn.

import java.util.*;
class Student {
    public static ArrayList<Student> arrStudent;
    private String ma, ten, nganh, lop;
    public void setId(String ma1) {
        this.ma=ma1;
    }
    public void setName(String ten1) {
        this.ten=ten1;
    }
    public void setNganh(String nganh1) {
        this.nganh=nganh1;
    }
    public void setLop(String lop1) {
        this.lop=lop1;
    }
    public String getId() {
        return this.ma;
    }
    public String getName() {
        return this.ten;
    }
    public String getNganh() {
        return this.nganh;
    }
    public String getLop() {
        return this.lop;
    }
    public Student(String id,String name,String nganh,String lop) {
        this.ma=id;
        this.ten=name;
        this.nganh=nganh;
        this.lop=lop;

    }
    public static void setSv() {
        System.out.println("Nhap thong tin sinh vien");

        Scanner nhap=new Scanner(System.in);
        System.out.print("Nhap ma sinh vien:");
        String id=nhap.nextLine();

        Scanner nhap2=new Scanner(System.in);
        System.out.print("Nhap ten sinh vien:");
        String name=nhap2.nextLine();

        Scanner nhap3=new Scanner(System.in);
        System.out.print("Nhap nganh sinh vien:");
        String nganh1 =nhap3.nextLine();

        Scanner nhap4=new Scanner(System.in);
        System.out.print("Nhap lop sinh vien:");
        String lop1 =nhap4.nextLine();

        arrStudent=new ArrayList<Student>();
        Student s=new Student();
        s.setId(id);
        s.setName(name);
        s.setNganh(nganh1);
        s.setLop(lop1);
        arrStudent.add(s);

    }
    public static void viewSv() {
        System.out.println("Xem thong tin sinh vien: ");
        Iterator it=arrStudent.iterator();
        while(it.hasNext()) {
            Object obj=it.next();
            if(obj instanceof Student) {
                Student st=(Student)obj;
                System.out.println ("id="+ st.getId());
                System.out.println ("name="+ st.getName());
                System.out.println ("nganh="+ st.getNganh());
                System.out.println ("lop="+ st.getLop());

            }
        }
    }

    public Student() {
        super();
    }
}
public class JavaApplication1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Student a=new Student();
        a.setSv();
        a.viewSv();
    }
}
nghiatdph03905 viết 20:31 ngày 30/09/2018

một câu trả lời không thể chi tiết hơn
thank you veru much much

*grab popcorn* viết 20:33 ngày 30/09/2018

A post was split to a new topic: Mong mọi người giải thích về super trong Java

Phan Như Huỳnh Anh viết 20:25 ngày 30/09/2018

2 ý tưởng trên là sai nhé.
Mình xin đưa vài ý kiến nhỏ:

  1. Không nên tổ chức static arrStudent trong Class Student. Bởi vì nó ko phải là thuộc tính hay cái gì đó chung nhất của Student. Mà đúng ra nên để trong class Single ManagerStudent,

  2. Dùng contructor với tham số truyền vào, nên hiểu là phải có tham số đó mới có thể tạo đối tượng, còn ko thì nên dùng setXXX()

  3. Đối tượng Scanner tạo 1 lần thôi.

  4. gọi arrStudent mà new trong hàm setSv là SAI, mà nên viết lại

public static ArrayList arrStudent = new ArrayList();

sau đó trong hàm dùng arrStudent.add() để add student

  1. setSv mà viewSv nên bỏ static đi.

  2. System.out.println(arrStudent.get(i)); // hàm vậy là sai. nên viết lại.

System.out.println(arrStudent.get(i).printInfo());

public String printInfo() {
// in các thông tin cần ra
}

Bài liên quan
0