2つのソートされた配列を1つにまとめたい
要素数5のソート済みの配列 {1,2,4,5,7},{8,9,11,13,17} を
要素数10のソート済みの配列 {1,2,4,5,7,8,9,11,13,17} としたいため、
以下のようなコードを考えました。
public static void main(String[] args) {
int[] a = { 1, 2, 4, 5, 7 };
int[] b = { 8, 9, 11, 13, 17 };
int[] s = new int[10];
int i = 0; //配列aのi番目を指定
int j = 0; //配列bのj番目を指定
int k = 0; //配列sのk番目を指定
while ((i < 5) || (j < 5)) {
if (a[i] < b[j]) {
s[k] = a[i];
i++;
} else {
s[k] = b[j];
j++;
}
k++;
}
while (i < 5) {
s[k] = a[i];
i++;
}
while (j < 5) {
s[k] = b[j];
j++;
}
System.out.println(Arrays.toString(s));
}
これを実行したところ、以下のエラーが発生しました。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at mergeSort.MergeSort.main(MergeSort.java:17)
java.lang.ArrayIndexOutOfBoundsExceptionは
配列のインデックスに存在しない要素を指定した時のエラーだと理解していますが、
iもjも配列の要素数である5以内に収まっているように思います。
なぜこのエラーが出るのでしょうか。
ご教授いただければ幸いです。