Hỏi về nhập xuất mảng 1 chiều trong java?

Em có đoạn code nhập xuất mảng 1 chiều như sau, nhưng khi nhập xong thì mảng B vẫn không có giá trị nên không xuất ra gì, ai giúp em với!

import java.util.Scanner;

public class Cau13 {
	public static void nhapmangA(int[] A)
	{
		@SuppressWarnings("resource")
		Scanner in = new Scanner(System.in);
		System.out.print("Nhập kích thước mảng A: ");
		int n = in.nextInt();
		
		A = new int[n];
		for(int i=0;i<n;i++)
		{
			System.out.print("A["+i+"] = ");
			A[i] = in.nextInt();
		}
	}
	public static void xuatmang(int[] A) {
		System.out.print("Danh sách mảng: ");
		for(int i=0;i<A.length;i++)
		{
			System.out.print("\t"+A[i]);
		}
	}
	
	public static void main(String[] args) {
		int [] B = null;
		nhapmangA(B);
		xuatmang(B);
	}
}

Java là pass-by-value nhé bạn
Để khắc phục bạn tạo hàm trả về một mảng sau đó gắn B vô
Tìm hiểu thêm:



http://www.journaldev.com/3884/java-is-pass-by-value-and-not-pass-by-reference

1 Like

Mình sửa vẫn không được, bạn có thể hướng dẫn code cho mình được không, cảm ơn bạn!

import java.util.Scanner;

public class Cau13 {
public static int[] nhapmangA(int A[])
{
@SuppressWarnings(“resource”)
Scanner in = new Scanner(System.in);
System.out.print("Nhập kích thước mảng A: ");
int n = in.nextInt();

	A = new int[n];
	for(int i=0;i<n;i++)
	{
		System.out.print("A["+i+"] = ");
		A[i] = in.nextInt();
	}
	return A;
}
public static int xuatmang(int A[]) {
	System.out.print("Danh sách mảng: ");
	for(int i=0;i<A.length;i++)
	{
		System.out.print("\t"+A[i]);
	}
	return 0;
}

public static void main(String[] args) {
	int [] B = null;
	nhapmangA(B);
	xuatmang(B);
}

}

Vấn đề là bạn quên gán B, array được trả về bởi nhapmangA nhưng không có biến nào chứa kết quả trả về cả

Bạn có thể bỏ tham số int A[] đi vì nó bị dư rồi
Sửa:

public static int[] nhapmangA(/*int A[] dư*/)
{
@SuppressWarnings("resource")
Scanner in = new Scanner(System.in);
System.out.print("Nhập kích thước mảng A: ");
int n = in.nextInt();

	int[] A = new int[n];// tạo ra một mảng mới luôn
	for(int i=0;i<n;i++)
	{
		System.out.print("A["+i+"] = ");
		A[i] = in.nextInt();
	}
	return A;
}

Có cách nào đưa tham số vào hàm, để khởi tạo mảng mới trong hàm main và dùng mảng đó làm tham số cho hàm nhập và xuất không? Nếu làm như vậy thì mình không dùng được 2 hàm nhập, xuất riêng ra được. Cảm ơn bạn

Trong Hàm Nhập thì bạn đã gán A tham chiếu tới một vùng nhớ khác rồi, nên mọi tham số khi truyền vào sẽ không có giá trị nào nữa do A ko còn tham chiếu tới B nữa. Khắc phục thì bạn bỏ A = new int[] trong hàm nhập đi, và khởi tạo cho mảng B ở bên rồi truyền vào

Mình bỏ A = new int[] rồi mà vẫn không được, bỏ xong thì vừa nhập xong A[0] là bị lổi luôn. Bạn kiểm tra giúp mình còn lổi chổ nào nữa không với. Cảm ơn bạn nhiều.

Bạn có thể tạo một class ví dụ class MyInput có một property là mảng kiểu int, rồi dùng object của class này để truyền data qua 2 method.

vẫn lỗi chỗ đó thôi, đoán là nullpointerexception, lí do: bạn truy cập vào đối tượng chưa khởi taoj

Bạn có thể sửa code giúp mình được không! Mình cảm ơn

Không, bạn nên tự làm thì tốt hơn.
Có mấy keyword hint cho bạn:

  • java là pass by value nên tất cả những gì truyền vào đều là giá trị, reassign ở trong function không làm thay đổi giá trị của biến bên ngoài.
  • biến muốn sử dụng phải được gán giá trị (trừ các biến kiểu primitive) nếu không thì sẽ bị null pointer.
    Kiếm sách java học từ đầu đến cuối thì sẽ làm được bài trên thôi. Đừng nhảy cóc không đâu vào đâu đâu
3 Likes

Hi bạn ! lỗi sai đầu tiên của bạn đó là tạo ra một mảng B null, khi bạn truyền vào thì mặc định nó sẽ null.
tiếp theo khi bạn tạo mảng A ở mỗi method thì nó chỉ có giá trị trong method đó , muốn dùng chung bạn nên ra hàm main để tạo!
mình giợi ý cách giải, đó là bạn nhập chiều dài của mảng ngay hàm main, sau đó tạo mảng ngay hàm main luôn! sau đó lấy mảng vừa tạo ra truyền vào hai hàm xuất , nhập!
cám ơn bạn đã đăng bài!

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