Индекс за пределами Java сортировка слиянием? - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю над алгоритмом сортировки слиянием.Ниже то, что я написал до сих пор.Проблема в том, что когда я пытаюсь запустить его, чтобы увидеть, работает ли он, я получаю ошибку индекса вне границ в операторе if, который я пометил комментарий .

Почему я получаю индекс за пределами строки, к которой я прокомментировал следующую строку?

Я знаю, что означает ошибка, но не могу понять, почему еевне границ.

public class MergeSort {

    public static int mergeSort(int[] list1, int[] list2) {
        int[] list3 = new int[list1.length + list2.length];
        int smallest1 = list1[0];
        int smallest2 = list2[0];
        int position1 = 0;
        int position2 = 0;

        for (int i = 0; i<list1.length + list2.length; i++) {
                for (int j =0; j<= list1.length; j++) {
                    if (list1[j] < smallest1) { //here index out of bouds
                        smallest1 = list1[j];
                        System.out.print(list1[j]+"smallest value");
                        position1 = j;
                    }
                }
                for (int l =0; l<= list2.length; l++) {
                    if (list2[l] < smallest2) {
                        smallest2 = list2[l];
                        System.out.print(list2[l]+"smallest value");
                        position2 = l;
                    }
                }

                if (smallest1< smallest2) {
                    list3[i] = smallest1;
                } else if (smallest2< smallest1) {
                    list3[i] = smallest2;
                }
        }
        //print the array
        for (int l =0; l<= list2.length; l++) {
            System.out.print("new array 3" + list3[l]);
        }
        return 1;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] list1 = {17, 22, 35, 42, 60};
        int[] list2 = {9, 14, 66};
        int[] list3;

        mergeSort(list1, list2);
    }

}   

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Индексы работают от 0, это означает, что когда list1.length = 5, тогда индекс может быть от 0 до 4
, изменить

for (int j =0; j<= list1.length; j++)

на

for (int j =0; j < list1.length; j++)
0 голосов
/ 12 декабря 2018
  • Это потому, что ваше условие цикла равно <=.Попробуйте использовать <
...