public class txt1 {
public static int[] Mepo(int p,int r) {
int[] arr=new int[r];
int i=0;
while(i<=r-1) {
arr[i]=r-i;
i++;
}
int q=(r-p)/2;
if(p==r) {
return new int[] {arr[q]};
}
int[] arr3=new int[r+1];
int arr1[]=Mepo(p,q);
int arr2[]=Mepo(q+1,r);
i=1;
int j=1;
int t=1;
while(i<=arr1.length && j<=arr2.length) {
if(arr1[i]<=arr2[j]) {
arr3[t]=arr1[i];
t++;
i++;
}else {
arr3[t]=arr2[j];
t++;
j++;
}
}
while(i<=arr1.length) {
arr3[t]=arr1[i];
}
while(j<=arr2.length) {
arr3[t]=arr2[i];
}
return arr3;
}
public static void main(String[] args) {
int[] result=Mepo(1,4);
for(int x:result) {
System.out.println(x);
}
}
}
搞了半天的归并排序,没有弄懂为什么这段代码无法运行,有点参考网上的百度百科但是也有自己的思路,是溢出问题吗?可我看不出来
debug一下,很容易看出原因的,你的 Mepo 方法递归到最后 r = -1了,然后去创建 int数组的时候size是不可以为-1的所以报了NegativeArraySizeException这个异常
不知道你这个问题是否已经解决, 如果还没有解决的话:import java.io.*;
import java.util.*;
public class App {
public static void main(String[] args) {
File file = new File("int.txt");
if (!file.exists()) {
System.out.println("文件int.txt不存在!");
return;
}
List<Integer> intlist = new ArrayList<>();
try (Scanner sc = new Scanner(file);) {
while (sc.hasNextInt()) {
int aInt = sc.nextInt();
intlist.add(aInt);
}
} catch ( InputMismatchException e) {
e.printStackTrace();
}
catch ( FileNotFoundException e) {
e.printStackTrace();
}
Collections.sort(intlist);
for (Integer element : intlist) {
System.out.print(element.intValue() + " ");
}
System.out.println();
}
}