Lỗi duyệt phần tử trong ArrayList<SinhVien>

package testproject;

import java.util.ArrayList;
import java.util.Scanner;

class SinhVien {
    String name,lop;
    short age;
}

public class TestProject {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    SinhVien sv ;
    ArrayList<SinhVien> arr;
    Scanner in = new Scanner(System.in);
    arr = new ArrayList<>();
    sv = new SinhVien();
    short k;
    while (true) {
        try {
        System.out.println("1. Nhap danh sach sinh vien");
        System.out.println("2. Hien thi danh sach sinh vien");
        System.out.println("3. Tim kiem theo ten");
        System.out.println("4. Exit");
        System.out.print("chon: ");
        k = Short.parseShort(in.nextLine());
            switch(k) {
            case 1:
                System.out.print("Nhap ten: ");
                sv.name =  in.nextLine();
                System.out.print("Nhap tuoi: ");
                sv.age = Short.parseShort(in.nextLine());
                System.out.print("Nhap lop: ");
                sv.lop = in.nextLine();
                arr.add(sv);
                break;
                case 2:
                 System.out.println("Hien thi danh sach sinh vien");
                   SinhVien svv = new SinhVien();
                  for (short i = 0;i<arr.size();i++) {
                       svv = arr.get(i);**
                   System.out.println("Ten: " +i+" "+svv.name );
                    }
                break;
            case 3:
                break;
            case 4:
                System.exit(0);
            default:
                System.out.println("khong co chung nay nay");
        }

        } catch(Exception e)
                {
                    System.out.println("Khong thay cai gi");
                }
                }
}

}

Sau khi mình nhập 2 người và duyệt để in ra 2 người thì đều in ra tên một người cuối khi nhập.
Ai xem giúp mình là lỗi ở đâu!!
Thank!!

1 Like

Không thấy gì bạn ơi ?, có in tên 2 người rồi còn gì

Mình nhập tên 2 người khác nhau nhưng lại in ra 2 người giống nhau.
Nên nó bị lỗi

Bạn thao tác trên đúng một đối tượng Sinh Viên lại thay đổi giá trị tên của sinh viên đó 2 lần thì khi in ra nó sẽ in ra giá trị của biến name ở lần nhập cuối => bạn nên làm như sau

package exercises.basic;

import java.util.ArrayList;
import java.util.Scanner;

class SinhVien {
	String name, lop;
	short age;
}

public class TestExample {

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String[] args) {
		// TODO code application logic here

		ArrayList<SinhVien> arr = new ArrayList<SinhVien>();
		Scanner in = new Scanner(System.in);
		short k;
		while (true) {
			try {
				System.out.println("1. Nhap danh sach sinh vien");
				System.out.println("2. Hien thi danh sach sinh vien");
				System.out.println("3. Tim kiem theo ten");
				System.out.println("4. Exit");
				System.out.print("chon: ");
				k = Short.parseShort(in.nextLine());
				switch (k) {
				case 1:
					SinhVien sv = new SinhVien();
					System.out.print("Nhap ten: ");
					sv.name = in.nextLine();
					System.out.print("Nhap tuoi: ");
					sv.age = Short.parseShort(in.nextLine());
					System.out.print("Nhap lop: ");
					sv.lop = in.nextLine();
					arr.add(sv);
					break;
				case 2:
					System.out.println("Hien thi danh sach sinh vien");
					SinhVien svv = new SinhVien();
					for (short i = 0; i < arr.size(); i++) {
						System.out.println("Ten: " + i + " " + arr.get(i).name);
					}
					break;
				case 3:
					break;
				case 4:
					System.exit(0);
				default:
					System.out.println("khong co chung nay nay");
				}

			} catch (Exception e) {
				System.out.println("Khong thay cai gi");
			}
		}
	}
}
2 Likes

Thank you very much!!!
Mình đã làm thành công

Mình nghĩ lần sau khi gặp vấn đề gì, bạn nên nêu rõ tình trạng và hỏi đúng câu hỏi.
Nếu ngay từ đầu bạn nói rõ là bị lỗi chỉ hiện thì tên người thứ 2 thì có lẽ mọi người không cần đọc code cũng có thể giúp bạn :joy::joy:

Mình nghĩ bạn không nên code hộ luôn như vậy, lỗi như này chỉ cần giải thích về reference variable là bạn ấy có thể hiểu và tự sửa lỗi => sẽ nhớ lâu hơn.

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