2016-02-03 4 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» индекс для массива Ь является проблемой.

Решение находится ниже. Удачи

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 = новый int [3]; int [] b = новый int [5]; a [0] = 1; a [1] = 2; a [2] = 3; b [0] = 4; b [1] = 5; b [2] = 6; int [] c = новый int [a.length + b.length]; int i = 0; для (i = 0; i Shaan

+0

Сначала для цикла скопируйте все записи из массива a [] в c []. Второй для массива копий цикла от b [] до c []. Наконец, вы разбираете их. Если переменная 'i' начинается с 0 в цикле for, вам не нужно иметь длину-1. Вам нужно только иметь длину-1, если «i» проиндексирован с 1. – Shaan

Смежные вопросы