索引越界 Java 归并排序?
Index out of bounds Java merge sort?
我正在研究合并排序算法。以下是我到目前为止所写的内容。问题是当我尝试 运行 它以查看它是否正常工作时,我在用 comment[=22= 标记的 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);
}
}
- 这是因为你的for循环条件是
<=
。尝试使用 <
Indexes 运行 from 0, 这意味着当 list1.length = 5 那么索引可以是 0 到 4
改变
for (int j =0; j<= list1.length; j++)
至
for (int j =0; j < list1.length; j++)
我正在研究合并排序算法。以下是我到目前为止所写的内容。问题是当我尝试 运行 它以查看它是否正常工作时,我在用 comment[=22= 标记的 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);
}
}
- 这是因为你的for循环条件是
<=
。尝试使用<
Indexes 运行 from 0, 这意味着当 list1.length = 5 那么索引可以是 0 到 4
改变
for (int j =0; j<= list1.length; j++)
至
for (int j =0; j < list1.length; j++)