Hỏi code về tìm kiếm họ trong danh sách học sinh

Mình có viết một đoạn code thế này, nhưng khi cho in ra kết quả những người có họ tương ứng thì chỉ in được họ, không in được tên đầy đủ, có thành nào giúp với!

public class Study {
    public static void main(String[] args) {
        Scanner inPut = new Scanner(System.in);
        String [] hocSinh = new String[100] ;
        System.out.print("Nhập số học sinh: ");
        int n=inPut.nextInt();
        for (int i=0; i<n; i++){
            System.out.print("Nhập học sinh thứ "+(i+1)+": ");
            hocSinh[i] = inPut.next();
            inPut.nextLine();
        }
        
        System.out.print("Nhập họ muốn tìm: ");
        String ho = inPut.nextLine();
        
        System.out.println("Những người có họ " + ho + ": ");
        for (int i=0; i<n; i++){
            if(hocSinh[i].substring(0, (ho.length())).equals(ho)){
                System.out.println(hocSinh[i]+" ");
            }
        }
    }        
}

mình nghĩ code của bạn in ra đc họ tên đầy đủ rồi chứ nhỉ .

Không cần dòng này.

biểu thức này đâu phải tìm họ r so sánh đâu. theo mình sửa thành

int index = hocSinh[i].indexOf(" ");
if(hocSinh[i].substring(0, index).equals(ho)){
    System.out.println(hocSinh[i]+" ");
}
2 Likes

mình góp ý cho bạn nên dùng arrayList , và tốt hơn thì nên có class Học Sinh bao gồm 2 thuộc tính là họ tên và số thứ tự . làm kiểu này nông dân quá :smile:

Phải dùng nextLine, vì method next này chỉ lấy các kí tự đến dấu cách là ngừng rồi.

2 Likes

@Rok_Hoang nói chuẩn đấy , hồi học java core , mình hay bị thế :smile:

1 Like

chắc chỗ này bạn ấy nhầm cái này:

hocSinh[i] = inPut;
hocSinh[i].nextLine();

p/s: Mình cũng mới học đến khúc này à :smile: giống problem của gets với scanf bên C

1 Like

Tks bác, cách bác làm hơi mới vs mình, dù sao cũng tks :smile:

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