Array in java..- Java

Bài này mình code bằng c++ thì chạy được mà code = java thì cứ bị báo sai ở dòng 20, mk k hiểu làm sao? mn giúp mk với. Mình cảm ơn nhiều.



public class Bai52 {
	public static void nhap(int a[], int n){
		for(int i=0;i<n;i++){
			System.out.println("Nhap gia tri: ");
			Scanner in = new Scanner(System.in);
			a[i]= in.nextInt();
		}
	}
	public static void in(int a[], int n){
		for(int i=0;i<a.length;i++){
			System.out.print(a[i]+"  ");
		}
	}
	public static void chen(int a[], int b[], int m,int n,int p){
		for(int i=m+n-1;i>=m+p;i--){
			//int j=i-m;
			a[i]=a[i-m];
		}
		for(int i=m+p-1;i>=p;i--) a[i]=b[i-m];
		in(a,m+n);
	}
	public static void main(String [] args){
		int a[],n;
		Scanner in= new Scanner(System.in);
		System.out.println("Nhap so"
				+ " phan tu cua mang a: ");
		n=in.nextInt();
		a= new int[n];
		nhap(a,n); 	in(a,n);
		System.out.println("\nNhap so phan tu cua mang b: ");
		int m,b[];
		m=in.nextInt();
		b=new int[m];
		nhap(b,m);	in(b,m);
		int p;
		System.out.println("\nNhap vi tri can chen: "); 
		p=in.nextInt();
		chen(a,b,m,n,p);
	}

}

MÌnh mới hk java thôi

bị lỗi “java.lang.ArrayIndexOutOfBoundsException” bỏ dấu “=” chỗ vòng lặp thì hết lỗi, mà mình ko hiểu sao chỉ in ra mảng a mà ko có mảng b ?

for(int i=m+n-1;i>m+p;i--){
			a[i]=a[i-m];
}
for(int i=m+p-1;i<p;i--) a[i]=b[i-m];
in(a,m+n);
//in(b,m+n); ?

mình quên không nói yêu cầu đề bài. đề là ghép mảng b kể từ vtri p vào mảng a. ok. Thank b nha.

1 Like

Theo mình là do bạn không khởi tạo lại mảng a với length = n + m
vì mảng a trong hàm main() bạn gán length = n
vào hàm chèn là ăn hành ngay :smiley:

Bạn nên tạo 1 array mới

public class Bai52 {
	public static Scanner in = new Scanner(System.in);
	
	public void nhap(int a[], int n){
		for(int i=0;i<n;i++){
			System.out.printf("a[%d]= ",i);
			a[i]= Integer.parseInt(in.nextLine());
		}
	}
	
	public void in(int a[]){
		for(int i=0;i<a.length;i++){
			System.out.printf("%d\t",a[i]);
		}
	}
	
	public void chen(int a[], int b[], int m, int n, int p){
//		for( int i=m+n-1 ; i >= m+p ; i--){
//			//int j=i-m;
//			a[i]=a[i-m];
//		}
//		for(int i=m+p-1;i>=p;i--) a[i]=b[i-m];
		if(p > n || p < 0){
			System.out.printf("\n0<= %d <= %d",p, n);
			return;
		}
		int arr[] = new int[m+n];
		for(int i = 0; i < m+n ;i++){
			if(i >= p && i < m + p){
				arr[i] = b[i -p];
				continue;
			} else if( i > p){
				arr[i] = a[i - m];
			} else {
				arr[i] = a[i];
			}
		}
		in(arr);
	}
	
	public static void main(String [] args){
		int a[],b[], n, m, p;
		
		Bai52 b52 = new Bai52();
		
		System.out.print("Nhap so phan tu cua mang a: ");
		n=Integer.parseInt(in.nextLine());		
		a= new int[n];
		
		b52.nhap(a,n); 	
		b52.in(a);
		
		System.out.print("\nNhap so phan tu cua mang b: ");
		
		m=Integer.parseInt(in.nextLine());
		b=new int[m];
		
		b52.nhap(b,m);
		b52.in(b);
		
		
		System.out.printf("\nNhap vi tri can chen(%d -> %d) :",0,n); 
		p=Integer.parseInt(in.nextLine());
		b52.chen(a,b,m,n,p);
	}

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