Thắc mắc về bài tập mảng trong JAVA

  • Đề bài : Viết chương trình nhập 2 mảng Họ Tên và Điểm của từng Sinh Viên.
    Yêu Cầu: Xuất 2 mảng đã nhập, mỗi Sinh Viên có thêm Học Lực.
  • Yếu: điểm<5
  • Trung bình: 5<=điểm <6.5
  • Khá : 6.5<=điểm<8
  • Giỏi : điểm >=8
    Sắp xếp danh sách Sinh Viên đã nhập tăng dần theo điểm.
  • Em nghĩ bài này phải dùng đến List hay Struct để làm. Tại sao lại yêu cầu 2 mảng vậy ?
  • Dùng 2 mảng thì làm thế nào để xuất ra Sinh Viên tăng theo điểm ?
  • Làm 2 mảng nhưng Họ tên và Điểm nhưng khi sắp xếp tăng theo điểm thì Họ Tên không đúng.
  • Các anh/chị giải thích giúp em với. Chỉ giúp em hướng để làm với.
    Em cảm ơn nhiều … :smiley::smiley::smiley:

Chắc chưa học đến khai báo class đó mà :smiley: tới đó thì cài comparator rồi chấm sort.

Bây giờ thì slot 1 của mảng điểm sẽ gắn với slot 1 của mảng họ tên.

6 Likes
  • Sắp xếp danh schs sinh viên đã nhập tăng dần theo điểm

HƯỚNG DẪN

  • Sử dụng lệnh if để xét học lực sau đó xuất thông tin từng sinh viên
    • Họ tên:
    • Điểm:
    • Học lực:
  • Bài này bạn không thể sử dụng Array.sort() để sắp xếp được mà phải sử dụng đến thuật toán tùy biến (tham khảo slide bài giảng)

Bài không yêu cầu dùng chấm sort anh ơi.

Đấy gọi là mảng song song.
Khi sắp xếp thì phải đổi chỗ, thay vì đổi chỗ 1 mảng thì bây giờ là đổi chỗ cả 2 mảng với chỉ số giống nhau.

5 Likes

Có thể cho em gợi ý chi tiết hơn được không ?
Em vẫn chưa hình dung ra được cách làm bài này.

ơ, viết khó hiểu nhỉ.
Không yêu cầu dùng = có thể dùng có thể không
yêu cầu không dùng = không được dùng.
Mà tôi đọc đề hình như yc mỗi mảng là lưu thông tin của 1 sv đúng k bạn?

1 Like

Bài này bạn phải tự viết phương thức để sắp xếp sinh viên.

Array.sort() không dùng được, có muốn cũng không được. Vì đây là 2 mảng song song và phụ thuộc nhau. Thế nên phải tự viết phương thức sắp sếp riêng. Thuật toán thì có nhắc đến slide nào đó rồi.
Các yêu cầu đề bài đều có lý cả.

4 Likes

hà mã tím đáng yêu nghe trong gió có mùi HashMap<> :boom:

3 Likes

Dùng .sort không được bạn ơi.
Còn 2 mảng thì 1 mảng lưu họ tên. 1 mảng thì lưu điểm.

ủa, vậy khó khăn của bạn là gì?

bạn có 2 mảng mảng điểm: a[] & mảng tên b[] cùng độ dài n.

if (a[i] > a[i+1]) {
diem = a[i];
a[i] = a[i+1];
a[i+1] = diem;

ten= b[i];
b[i] = b[i+1];
b[i+1] = ten;
}

:point_down::point_down::point_down:

package bt;

import java.util.Scanner;

public class Baitap4 {
		private static Scanner input;
		public static void main(String[] args) {
			input = new Scanner(System.in);
			System.out.print("Nhap so luong sinh vien = ");
			int n=input.nextInt();
			String[] A=new String[n];
			
			for(int i=0;i<n;i++) {
				System.out.println("- Nhap thong tin sinh vien thu "+i+" : ");
				System.out.print("Ho ten sv: ");
				input.nextLine();
				A[i]=input.nextLine();
				
			}
			int B[]=new int[n];
			for(int i=0;i<n;i++) {
				System.out.println("- Nhap thong tin sinh vien thu "+i+" : ");
				System.out.print("Diem : ");
				B[i]=input.nextInt();
			}
			for(int i=0;i<n;i++) {
				if(B[i]<5) {
					System.out.println("Ten : "+A[i]+"\n Diem: "+B[i]+"\nHoc Luc: yeu");
				}
				if(B[i]>5 && B[i]<6.5) {

					System.out.println("Ten : "+A[i]+"\n Diem: "+B[i]+"\nHoc Luc: trung binh");
				}
				if(B[i]>=6.5 && B[i]<7.5) {

					System.out.println("Ten : "+A[i]+"\n Diem: "+B[i]+"\nHoc Luc: kha");
				}
				if(B[i]>=7.5 && B[i]<9) {

					System.out.println("Ten : "+A[i]+"\n Diem: "+B[i]+"\nHoc Luc: gioi");
				}
				if(B[i ]>=9) {

					System.out.println("Ten : "+A[i]+"\n Diem: "+B[i]+"\nHoc Luc: xuat sac");
				}
			} 
	}
			

}

Code của mình. Mảng A là tên. Mảng B là điểm.
Mà khi dùng if để xét học lực thì không in hết được thông tin. Kết quả như ảnh bên dưới.

1 Like

Ố ồ!!! Gọi 2 lần làm gì???

4 Likes

Tránh việc không dừng lại để nhập thông tin. Không dùng sẽ bị nhảy khi nhập thông tin vào

1 Like

Sai rồi bạn, bạn đọc lại mấy lệnh nhập dữ liệu nhé.

không dùng dòng input.nextLine(); đầu tiên thì sẽ không nhập được thông tin người đầu tiên bạn ơi.

“Sửa” lỗi nhỏ thành lỗi to. :+1:

Thế thì để nó trước vòng lặp không được à?

4 Likes

fix được chưa. Code bạn sửa 1 dòng là được thôi.

Cám ơn bạn, mình cũng viết giống bạn mà sửa qua sửa lại vẫn bị nhảy thông tin. Lên google gõ dùng 2 mảng trong java thì ra bài này.
Thật sự cảm ơn.
Nhưng khi nhập liệu thì phải Enter xuống hàng từ người thứ 2 trở đi hoặc viết 2 lần, vì nếu không nó sẽ bị trống ở tên người đó.

NhapLieu2

Đây là kết quả mình đã nhập liệu. Từ người thứ 2 phải Enter để xuống hàng hoặc ghi 2 lần luôn.

Đây là: Dữ liệu và thông tin mình đã nhập và nhận được:

Nhập số sinh viên bạn muốn có thông tin: 
4
Nhập thông tin sinh viên thứ 1
A
Nhập thông tin sinh viên thứ 2

B
Nhập thông tin sinh viên thứ 3

C
Nhập thông tin sinh viên thứ 4
D
D
Nhập điểm của các sinh viên thứ 1 điểm: 
10
Nhập điểm của các sinh viên thứ 2 điểm: 
9
Nhập điểm của các sinh viên thứ 3 điểm: 
8
Nhập điểm của các sinh viên thứ 4 điểm: 
7
Thông tin sinh viên thứ 1 
Họ và tên: A
 Điểm: 10.0
Học lực: 
Xuất sắc
Thông tin sinh viên thứ 2 
Họ và tên: B
 Điểm: 9.0
Học lực: 
Xuất sắc
Thông tin sinh viên thứ 3 
Họ và tên: C
 Điểm: 8.0
Học lực: 
Giỏi
Thông tin sinh viên thứ 4 
Họ và tên: D
 Điểm: 7.0
Học lực: 
Khá
Câu 2: 
Danh sách sinh viên sau khi đã sắp xếp theo điểm tăng dần: 
Tên sinh viên: D Điểm: 7.0
Tên sinh viên: C Điểm: 8.0
Tên sinh viên: B Điểm: 9.0
Tên sinh viên: A Điểm: 10.0

Đăng mã, không chụp hình bạn ơi!

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