得到double []的最低值

lon*_*ome 0 java double overflow

我写了以下代码

我的目标是获得最低值,doble[] absOfSub但它在线上给出了以下异常 compared= Double.compare(d2, d1);

Exception in thread "main" java.lang.StackOverflowError
Run Code Online (Sandbox Code Playgroud)

为什么溢出以及如何解决它?

编辑

  public class TestThe {
static double[] absOfSub = new double[5];
    private static int index=0;

  private static int compare(int currentIdx, int minIdx) {
      if(index < absOfSub.length) {
         if(absOfSub[currentIdx] < absOfSub[minIdx]) {
             compare(currentIdx + 1, currentIdx);
         } else {
             compare(currentIdx + 1, minIdx);
         }
      }
  return minIdx;
  }

    public static void main(String[] args) {
    absOfSub[0]=1000;
    absOfSub[1]=810;
    absOfSub[2]=108;
    absOfSub[3]=130;
    absOfSub[4]=110;
double result;
   int inndex= compare(0,1);
      System.out.println(absOfSub[inndex]);

    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*nik 5

这个简单而优雅的解决方案怎么样?

static double min(double... ds) {
  double min = Double.POSITIVE_INFINITY;
  for (double d : ds) min = Math.min(min, d);
  return min;
}

public static void main(String[] args) {
  System.out.println(min(-5.2, 0, -10.1, 3));
}
Run Code Online (Sandbox Code Playgroud)

递归解决方案(不推荐!):

static double minRecur(double... ds) {
  return minRecur(ds, 0, Double.POSITIVE_INFINITY);
}
static double minRecur(double[] ds, int i, double runningMin) {
  return (i < 0 || i >= ds.length)? 
    runningMin : minRecur(ds, i + 1, Math.min(runningMin, ds[i]));
}
Run Code Online (Sandbox Code Playgroud)