2016-02-03 132 views
0

我得到了作業「拿兩個給定的數組(已經排序,例如{1,2,3})並創建一個包含兩個數組的新數組,然後將它們排序」,我們具有以下功能:升序排列,所以它不是問題,但它變得有點複雜,我,這裏是我的代碼:合併兩個數組和短合併數組

public static Scanner in = new Scanner(System.in); 

    public static void main(String[] args) { 
     int[] a = new int[3]; 
     int[] b = new int[5]; 
     Help_arr.scan(a); 
     Help_arr.scan(b); 
     Help_arr.print(peula(a, b)); 
    } 

    public static int[] peula(int[] a1, int[] b1) { 
     int[] c = new int[a1.length + b1.length]; 
     for (int i = 0; i < a1.length; i++) 
      c[i] = a1[i]; 
     for (int i = a1.length; i < c.length; i++){ 
      c[i] = b1[i]; 
     } 
     Help_arr.sortup(c); 
     return c; 
    } 

功能從Help_arr類使用:

1)掃描陣列:

public static void scan(int[] arr1) { 
    for (int i = 0; i < arr1.length; i++) { 
     System.out.println("Enter number" + (i + 1)); 
     arr1[i] = in.nextInt(); 
    } 
} 

2)打印的陣列:

public static void print(int[] arr1) { 
    for (int i = 0; i < arr1.length; i++) { 
     System.out.print(arr1[i] + " "); 
    } 
} 

3)升序的數組:

public static void sortup(int[] arr1) { 
    int i, mini, temp, j; 
    for (j = 0; j < arr1.length; j++) { 
     mini = j; 
     for (i = j; i < arr1.length; i++) { 
      if (arr1[i] < arr1[mini]) 
       mini = i; 
     } 
     temp = arr1[j]; 
     arr1[j] = arr1[mini]; 
     arr1[mini] = temp; 
    } 
} 

我在線路c[i]=b1[i];陣列外出指數界得到一個錯誤,但我隨後的代碼和這將運行until i=7 as the c.length is 8,這是可能的。但是,也許我失去了一些東西,這裏是錯誤:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 
    at arrays.PgRonTargilMivhan.peula(PgRonTargilMivhan.java:21) 
    at arrays.PgRonTargilMivhan.main(PgRonTargilMivhan.java:13) 

回答

3

的問題是與此代碼:

for (int i = a1.length; i < c.length; i++){ 
     c[i] = b1[i]; 

這裏b1指數應與0開始,但你開始a1.length。您應該有一個單獨的索引b1或使用b1[i-a1.length]

+0

哦,你是對的:)謝謝! – DAVIDBALAS1

+1

@ DAVIDBALAS1如果Atri解決了你的問題,請接受他的回答 –

+1

@GregHilston我知道但我不能,它說沒有足夠的時間過去。 – DAVIDBALAS1

0

請找出邏輯..

你正在使用的「i」索引數組b中的問題。

解決方法如下。祝你好運

int[] c = new int[a.length + b.length]; 
    int i = 0; 
    for (i = 0; i < a.length; i++) 
     c[i] = a[i]; 
    for (int j = 0; j < b.length; j++) 
     c[i] = b[j]; 
    } 
+0

也許在你的解決方案中找到邏輯。您正在將c [i]更改爲b [j],但由於前面的陳述我將成爲a.length-1。錯誤的答案 – DAVIDBALAS1

+0

所以,很明顯。我告訴你這個邏輯。以下是我爲你解答的完整邏輯。 int [] a = new int [3]; int [] b = new int [5]; a [0] = 1; a [1] = 2; a [2] = 3; b [0] = 4; b [1] = 5; b [2] = 6; int [] c = new int [a.length + b.length]; int i = 0;對於(i = 0; i Shaan

+0

先循環複製數組a []到c []的所有條目。第二個用於從b []到c []的循環拷貝數組。最後,你正在整理它們。如果變量'i'在for循環中從0開始,則不需要長度爲1。你只需要有長度爲1,如果'我'索引從1 – Shaan