Lỗi return trong java

Chào các anh, chị trong group. Em mới học java nên còn hơi mơ hồ .Mọi người cho em hỏi một bài toán là tìm số hoàn thiện trong mảng nhưng mà khi chạy hàm luôn trả về -1 (trong khi em nhập giá trị thỏa), nhờ mọi người tìm giúp em lỗi sai ạ. Em cảm ơn

public static void main(String[] args) {
	
	// Tìm số hoàn thiện (Tổng các ước bằng chính nó)
	// cuối cùng trong mảng nếu không
	// có thì trả về giá trị là -1//
	int n = 0;
	int arr[] = new int[100];
	nhap(n, arr);
	int sohoanthien = soHoanThien(n, arr);
	System.out.println("Số hoàn thiện cuối cùng trong mảng là: " + sohoanthien);

}// end main

public static void nhap(int n, int arr[]) {
	Scanner sc = new Scanner(System.in);
	System.out.println("Nhập số lượng phần tử trong mảng");
	do {
		n = sc.nextInt();
		if (n <= 0 || n > 100) {
			System.out.println("*****Lỗi nhập dữ liệu. Vui lòng nhập lại*****");
		}
	} while (n <= 0 || n > 100);
	// for
	System.out.println("Nhập giá trị phần tử");
	for (int i = 0; i < n; i++) {
		arr[i] = sc.nextInt();
		System.out.println("arr[" + i + "]= " + arr[i]);
	} // end for
}// end nhap
     public static int soHoanThien(int n, int arr[]) {
	// for
	int num;
	int sum;
	for (int i = n - 1; i >= 0; i--) {
		num = arr[i];     
            	sum = 0;
		for (int j = 1; j < num; j++) { 
			if (num % j == 0) {
				sum = sum + j;
			} // end if
		} // end for
		if (sum == num) {
			return num;
		} // end if

	} // end for
	return -1;
}// end soHoanThien

đặt breakpoint tai hàm public static int soHoanThien(int n, int arr[]) để xem giá trị n, bạn sẽ biết mình sai chổ nào!!!

2 Likes

vì hàm luôn có 100 phần tử, khi nhập không đủ các pt kia sẽ mặc định là 0, mà 1 > 0 sai nên vòng for chỉ chạy 1 lần, num =0, sum = 0+ 1 =1 , nên return -1

mà e chạy từ n - 1 đến 0 mà

hic nhầm,n = 0 mặc dù qua hàm nhap nhưng n vẫn = 0
cho hàm nhap vào trong hàm sohoanthien là dc.

dạ rồi em cảm ơn :smile:

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