java最近对StackOverflowError问题
import java.util.Scanner;public class ZuiJinDui {
public static int NUM = 40;
public static int D ;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] number = new int[NUM];
int all = 1;
int k ;
int x ;
boolean repeat;
System.out.println("该程序使用分治法求解一维空间上的最近对。");
System.out.printf("\n请输入要处理点的个数(最多 %d个 ):", NUM);
Scanner sc = new Scanner(System.in);
k = sc.nextInt();
for (int i = 0 ; i < k ; i++){
//生成随机数
int a=(int)(Math.random()*2+1);
int aa=(int)(Math.pow(-1, a));
int aaa=(int)(Math.random()*100+1);
int num=aa*aaa;
/*---------------------------*/
repeat = false;
x = num;
for(int j = 0 ; j<all ; j++){
//判断是否存在重复输入的点
if(x==number[j]){
repeat = true;
break;
}
}
if(!repeat){
number[all-1]=x;
all++;
}
}
k = all-1;
System.out.printf("\n无重复的点的个数为:%d\n",k);
if(k == 1){
System.out.printf("最近距离为 0\n");
}
else{
D = dmin1(number,k);
System.out.printf("\n其最近距离为:%d\n",Math.abs(D));
}
System.out.printf("生成的随机数\n");
int count = 0;
for(int a = 0 ; a<number.length ; a++ ){
System.out.print(number[a] + "\t");
count++;
if(count%10 == 0){
System.out.println();
}
}
}
private static int dmin1(int[] number, int k) {
// TODO Auto-generated method stub
int max;
int min;
int i ;
int m ;
int d1;
int d2;
int max1;
int min1;
int n1;
int n2;
int[] a1 = new int[NUM];
int[] a2 = new int[NUM];
/*
*处理点少于2的情况 */
if (k<2)
D=655359;
/*
*处理点多于等于2的情况 */
else{
max = min = number[0];
for(i = 0 ; i < k-1 ; i++){
if(number[i+1] > number[i])
max=number[i+1];
else
min=number[i+1];
}
m=(min+max)/2;//找出中位数
n1 = n2 = 0;
for( i = 0 ; i < k ; i++){
if(number[i]<m){
a1[n1] = number[i];
n1++;
}
else{
a2[n2] = number[i];
n2++;
}
}
d1=dmin1(a1,n1);
d2=dmin1(a2,n2);
//找分点两侧的点max1和min1
max1=a1[0];
for(i=0;i<n1-1;i++){
if(a1[i+1]>a1[i])
max1=a1[i+1];
}
min1=a2[0];
for(i=0;i<n2-1;i++){
if(a2[i+1]<a2[i])
min1=a2[i+1];
}
/*
*求最近点的距离D */
D = MIN(d1,d2,min1-max1);
}
return D;
}
private static int MIN(int d1, int d2, int i) {
// TODO Auto-generated method stub
int min=0;
if((d1 <= d2)&&(d1 <= i))
min = d1;
else if((d2 <= d1)&&(d2 <= i))
min = d2;
else if((i <= d1)&&(i <= d2))
min = i;
return min;
}
}
这是利用分治法写的最近对算法,不知道为啥我输入的处理点的个数接近或过半时的都会输出Exception in thread "main" java.lang.StackOverflowError
这个错误
输入的个数少的话不会有问题
我检查了很久都不知道哪里有问题 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 把jvm的线程栈调大试试 -Xss
补充:Java , Java SE