Индекс 4 выходит за пределы длины 3. Для массива Union - PullRequest
0 голосов
/ 03 июля 2019

// Каждый раз, когда я запускаю код, он продолжает выдавать мне ту же ошибку. Я не понимаю почему. Цикл функции объединяющего массива также не зацикливается полностью, вероятно, проблема с индексом строки вне границ.

// Я пытался изменить исходную функцию isNumberInArray, но все равно не работает.

package HW;

public class HW_5 {


public static boolean isNumberInArray(int number_check, int array[]) {
    for (int value : array) {
        value -= 1;
        if (number_check == array[value]) {
            return true;
        }
    }
    return false;
}


public static int highestlength(int array_1[]) {
    int max = array_1[0];
    for (int counter = 1; counter < array_1.length; counter++) {
        if (array_1[counter] > max) {
            max = array_1[counter];
        }
    }
    return max; 
}


public static int [] unionArrays(int [] array_1, int [] array_2) {
    int array_index_counter = 0;
    int highest_1 = highestlength(array_1);
    int highest_2 = highestlength(array_2);
    int[] union_array = new int[array_1.length + array_2.length];
    if (highest_1 > highest_2) {
    for (int value_1 : array_1) {
        if (isNumberInArray(value_1, array_1) && isNumberInArray(value_1, array_2)) {
            union_array[array_index_counter] = value_1;
            array_index_counter += 1;
        } else {
            for (int value_2 : array_2) {
                if (isNumberInArray(value_2, array_1) && isNumberInArray(value_2, array_2)) {
                    union_array[array_index_counter] = value_2;
                    array_index_counter += 1;
                }
            }
        }
    }
}
    printArray(union_array);
    return union_array;
}



public static void printArray(int array[]) {
    for (int value : array) {
        System.out.print(value + " ");
    }
    System.out.println();
}


public static void main(String[] Args) {
    int list_1[] = {1, 2, 3};
    int list_2[] = {1, 3, 5};
    System.out.println(isNumberInArray(0, list_1));
    System.out.println(unionArrays(list_1, list_2));
}
}


I expected the output to be 1 2 3 5, but the actual output is 0 0 0 0.

1 Ответ

1 голос
/ 03 июля 2019

Для начала странный цикл в isNumberInArray, попробуйте

public static boolean isNumberInArray(int number_check, int array[]) {
    for (int value : array) {
        if (number_check == value) {
            return true;
        }
    }
    return false;
}

Возможно, из-за этого ваши if операторы в unionArrays всегда false

...