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();
}
}
Bài liên quan
output của nó là
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:
+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.
Hi vọng giải đáp được thắc mắc của bạn.
một câu trả lời không thể chi tiết hơn
thank you veru much much
A post was split to a new topic: Mong mọi người giải thích về super trong Java
2 ý tưởng trên là sai nhé.
Mình xin đưa vài ý kiến nhỏ:
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,
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()
Đối tượng Scanner tạo 1 lần thôi.
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
setSv mà viewSv nên bỏ static đi.
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
}