Hỏi về lỗi nhập được xâu ký tự cho mảng trong Java

Các anh chị cho em hỏi làm sao nhập được chuỗi trong bài dưới đây ạ, ở chỗ tên sinh viên em chỉ có thể nhập 1 từ thôi vd như “Tu” , nếu nhập chuỗi cách một khoảng ra như “Dinh Anh Tu” thì sẽ bị lỗi ạ @@~

Đây là bài code của em ạ, mong các anh chị hồi đáp nhanh huhu

public static void main(String[] args) {
	int n;
	Scanner sc = new Scanner(System.in);
	System.out.print("Nhap so luong sinh vien : ");
	n=sc.nextInt();
	System.out.println("");
	String[] hoten = new String[n];
	Double[] diem = new Double[n];
	for(int i=0;i<n;i++) {
		System.out.print("Nhap ten sinh vien : ");
		hoten[i]=sc.next();
		System.out.print("Nhap diem sinh vien : ");
		diem[i]=Double.parseDouble(sc.next());
		System.out.println("");
	}
	for (int i=0;i<n-1;i++) {
		for(int j=0;j<n;j++) {
			if(diem[i]>diem[j]) {
				double temp=diem[i];
				diem[i]=diem[j];
				diem[j]=temp;
				
				String t=hoten[i];
				hoten[i]=hoten[j];
				hoten[j]=t;
			}
		}
		System.out.println("");
		for(i=0;i<hoten.length;i++) {
			System.out.println("Sinh vien thu "+(i+1)+" : ");
			System.out.println("Ten cua sinh vien la : "+hoten[i]);
			System.out.println("Diem : "+diem[i]);
			if(diem[i]<5) System.out.print("Hoc luc : Yeu");
			if(diem[i] >= 5 && diem[i]<6.5) System.out.println("Hoc luc : Trung Binh");
			if(diem[i] >= 6.5 && diem[i] <7.5) System.out.println("Hoc luc : Kha");
		    if(diem[i] >=7.5 && diem[i] <9) System.out.println("Hoc luc : Gioi");
		    if(diem[i]>9) System.out.println("Hoc luc : Xuat Sac");
			System.out.println("");
			System.out.println("");
		}
	}
}

nextLine() chỗ nhập họ tên bạn ơi

4 Likes

Hi Gấu trắng.
Bạn xem lại phương thức next có vẻ như nó chỉ đọc từng từ một (mình không code java nhiều). Bạn có thể dùng nextLine để đọc cả dòng.

P/S Gấu trắng thương không hỏi mấy câu này.

4 Likes

nextLine vào nó sẽ không nhập được bạn ơi @@~

Nhập nextLine nó sẽ ra lỗi như v ạ

Hi Ice Bear.
Bạn cần xóa bộ đệm.

2 Likes

Trời ơi! Trong Scanner có tất cả phương thức để đọc các kiểu dữ liệu số rồi mà còn diem[i] = Double.parseDouble(sc.next()); :sweat_smile:

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextDouble()

4 Likes

next() chỉ đọc có 1 byte thôi, một số double cần đến 8 byte cơ :))
cứ diem[i] = sc.nextDouble() cho khoẻ

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